{"version":3,"sources":["webpack:///./src/onboarding/components/CloudLogoWithCubo.scss?c1ca","webpack:///./src/onboarding/components/CloudLogoWithCubo.tsx","webpack:///./src/onboarding/components/HelperText.tsx","webpack:///./src/onboarding/components/LoginForm.tsx","webpack:///./src/shared/components/SocialButton.tsx","webpack:///./src/shared/graphics/GoogleLogo.tsx","webpack:///./src/shared/graphics/MicrosoftLogo.tsx","webpack:///./src/onboarding/containers/LoginPageContents.tsx","webpack:///./src/onboarding/containers/LoginPage.tsx","webpack:///./src/shared/containers/RouteToOrg.tsx","webpack:///./src/shared/containers/GetOrganizations.tsx","webpack:///./src/shared/thunks/flags.ts","webpack:///./src/shared/containers/GetFlags.tsx","webpack:///./src/shared/containers/GetMe.tsx","webpack:///./src/Signin.tsx","webpack:///./src/onboarding/utils/index.ts","webpack:///./src/Setup.tsx","webpack:///./src/style/chronograf.scss?62b8","webpack:///./src/index.tsx","webpack:///./src/shared/constants/timeRanges.ts","webpack:///./src/variables/utils/resolveSelectedValue.ts","webpack:///./src/variables/utils/ValueFetcher.ts","webpack:///./src/utils/Deferred.ts","webpack:///./src/variables/utils/hydrateVars.ts","webpack:///./src/variables/actions/thunks.ts","webpack:///./src/shared/constants/fluxFunctions.ts","webpack:///./src/timeMachine/actions/queryBuilderThunks.ts","webpack:///./src/organizations/selectors/index.ts","webpack:///./src/shared/utils/duration.ts","webpack:///./src/visualization/constants.ts","webpack:///./src/shared/components/DurationInput.tsx","webpack:///./src/shared/contexts/query.tsx","webpack:///./src/schemas/buckets.ts","webpack:///./src/schemas/members.ts","webpack:///./src/schemas/orgs.ts","webpack:///./src/schemas/scrapers.ts","webpack:///./src/schemas/templates.ts","webpack:///./src/visualization/components/internal/StaticLegend.scss?ea0d","webpack:///./src/visualization/components/internal/StaticLegend.tsx","webpack:///./src/utils/datetime/formatters.ts","webpack:///./src/utils/api.ts","webpack:///./src/flows/context/sidebar.tsx","webpack:///./src/shared/utils/download.ts","webpack:///./src/types/alerting.ts","webpack:///./src/utils/nodes.ts","webpack:///./src/shared/constants/routes.ts","webpack:///./src/types/auth.ts","webpack:///./src/types/autoRefresh.ts","webpack:///./src/types/billing.ts","webpack:///./src/types/buckets.ts","webpack:///./src/types/dataExplorer.ts","webpack:///./src/types/flux.ts","webpack:///./src/types/geo.ts","webpack:///./src/types/logEvent.ts","webpack:///./src/visualization/components/View.tsx","webpack:///./src/visualization/components/ViewOptions.tsx","webpack:///./src/visualization/components/ViewTypeDropdown.tsx","webpack:///./src/visualization/index.ts","webpack:///./src/visualization/contextLoader.ts","webpack:///./src/types/me.ts","webpack:///./src/types/notifications.ts","webpack:///./src/types/operator.ts","webpack:///./src/types/orgs.ts","webpack:///./src/types/queries.ts","webpack:///./src/types/sources.ts","webpack:///./src/types/tasks.ts","webpack:///./src/types/templates.ts","webpack:///./src/types/users.ts","webpack:///./src/shared/actions/currentDashboard.ts","webpack:///./src/dashboards/utils/time.ts","webpack:///./src/identity/actions/creators/index.ts","webpack:///./src/shared/reducers/currentPage.ts","webpack:///./src/timeMachine/reducers/index.ts","webpack:///./src/utils/wrappers.ts","webpack:///./src/variables/constants/index.ts","webpack:///./src/secrets/actions/creators.ts","webpack:///./src/identity/quartzOrganizations/actions/creators/index.ts","webpack:///./src/store/history.ts","webpack:///./src/shared/components/DefaultErrorMessage.tsx","webpack:///./src/shared/utils/getMinDurationFromAST.ts","webpack:///./src/shared/components/search_widget/SearchWidget.tsx","webpack:///./src/dashboards/utils/getTimezoneOffset.ts","webpack:///./src/variables/utils/formatVarsOption.ts","webpack:///./src/variables/utils/formatExpression.ts","webpack:///./src/flows/templates/index.ts","webpack:///./src/flows/context/api.tsx","webpack:///./src/flows/pipes/Schedule/ExportTaskButton.tsx","webpack:///./src/shared/utils/fluxExample.ts","webpack:///./src/shared/components/FilterList/FilterList.tsx","webpack:///./src/visualization/components/internal/ColorSchemeDropdownItem.tsx","webpack:///./src/visualization/components/internal/LegendOptions.tsx","webpack:///./src/visualization/components/internal/LegendOptions.scss?4569","webpack:///./src/shared/utils/vis.ts","webpack:///./src/shared/utils/convertUserInput.ts","webpack:///./src/timeMachine/apis/QueryBuilderFetcher.ts","webpack:///./src/portals/TooltipPortal.tsx","webpack:///./src/shared/components/Checkbox.tsx","webpack:///./src/shared/components/CopyToClipboard.tsx","webpack:///./src/visualization/components/internal/ViewLoadingSpinner.tsx","webpack:///./src/dataExplorer/components/resources/index.ts","webpack:///./src/client/scriptsRoutes.ts","webpack:///./src/visualization/components/internal/HexColorSchemeDropdown.tsx","webpack:///./src/shared/components/views/ScrollableMarkdown.tsx","webpack:///./src/me/actions/thunks/index.ts","webpack:///./assets/images/dashboard-empty--dark.svg","webpack:///./src/utils/datetime/constants.ts","webpack:///./src/perf/components/PageSpinner.tsx","webpack:///./src/timeMachine/components/SelectorList.tsx","webpack:///./src/schemas/labels.ts","webpack:///./src/client/fluxdocsdRoutes.ts","webpack:///./src/shared/actions/fluxDocs.ts","webpack:///./src/flows/shared/BucketSelector/CreateBucketDropdownItem.tsx","webpack:///./src/flows/shared/BucketSelector/index.tsx","webpack:///./src/utils/naming.ts","webpack:///./src/shared/components/ClickOutside.tsx","webpack:///./src/shared/utils/featureFlag.ts","webpack:///./src/shared/contexts/editor/injection.ts","webpack:///./src/shared/utils/fluxFunctions.ts","webpack:///./src/shared/contexts/editor/index.tsx","webpack:///./src/shared/contexts/editor/insertFunction.ts","webpack:///./src/shared/components/views/MarkdownRenderer.tsx","webpack:///./src/timeMachine/actions/queryBuilder.ts","webpack:///./src/shared/actions/notifications.ts","webpack:///./src/types/dataLoaders.ts","webpack:///./src/shared/utils/errors.ts","webpack:///./src/onboarding/components/CloudLogoWithCubo.scss","webpack:///./src/schemas/dashboards.ts","webpack:///./src/flows/pipes sync ^\\.\\/([^\\/])+\\/index\\.(ts|tsx)$","webpack:///./src/flows/templates/types sync \\.(ts|tsx)$","webpack:///./src/flows/templates/types/blank.ts","webpack:///./src/flows/templates/types/bucket.ts","webpack:///./src/flows/templates/types/dashboard.ts","webpack:///./src/flows/templates/types/default.ts","webpack:///./src/flows/templates/types/downsample.ts","webpack:///./src/flows/templates/types/flow.ts","webpack:///./src/flows/templates/types/flux.ts","webpack:///./src/notifications/rules/utils/index.ts","webpack:///./src/flows/templates/types/intro.ts","webpack:///./src/flows/templates/types/notification.ts","webpack:///./src/flows/templates/types/share.ts","webpack:///./src/flows/templates/types/subscription.ts","webpack:///./src/flows/templates/types/task.ts","webpack:///./src/flows/templates/types/tools.ts","webpack:///./src/flows/pipes/Columns/styles.scss","webpack:///./src/flows/pipes/Downsample/style.scss","webpack:///./src/flows/pipes/Markdown/style.scss","webpack:///./src/flows/pipes/MetricSelector/style.scss","webpack:///./src/shared/constants/graphColorPalettes.ts","webpack:///./src/flows/pipes/Missing/styles.scss","webpack:///./src/flows/pipes/Notification/Threshold.scss","webpack:///./src/flows/pipes/Notification/endpoints sync ^\\.\\/([^\\/])+\\/index\\.(ts|tsx)$","webpack:///./src/flows/pipes/Notification/styles.scss","webpack:///./src/shared/components/TagSelectorCount.scss","webpack:///./src/flows/pipes/QueryBuilder/style.scss","webpack:///./src/flows/pipes/RawFluxEditor/style.scss","webpack:///./src/flows/pipes/Region/style.scss","webpack:///./src/flows/pipes/RemoteCSV/styles.scss","webpack:///./src/flows/pipes/Schedule/style.scss","webpack:///./src/flows/pipes/Spotify/style.scss","webpack:///./src/visualization/types sync index\\.(ts|tsx)$","webpack:///./src/visualization/components/internal/LegendOptions.scss","webpack:///./src/visualization/components/internal/StaticLegend.scss","webpack:///./src/shared/copy/notifications/common.ts","webpack:///./src/shared/copy/notifications/categories/accounts-users-orgs.ts","webpack:///./src/shared/copy/notifications/categories/annotations.ts","webpack:///./src/shared/copy/notifications/categories/auth-and-tokens.ts","webpack:///./src/shared/copy/notifications/categories/billing-checkout.ts","webpack:///./src/shared/copy/notifications/categories/buckets.ts","webpack:///./src/shared/copy/notifications/categories/dashboard.ts","webpack:///./src/shared/copy/notifications/categories/ingest.ts","webpack:///./src/shared/copy/notifications/categories/limits.ts","webpack:///./src/shared/copy/notifications/categories/notebooks.ts","webpack:///./src/onboarding/constants/index.ts","webpack:///./src/shared/copy/notifications/categories/onboarding.ts","webpack:///./src/shared/copy/notifications/categories/operator.ts","webpack:///./src/shared/copy/notifications/categories/secrets.ts","webpack:///./src/shared/copy/notifications/categories/subscriptions.ts","webpack:///./src/shared/copy/notifications/categories/tasks.ts","webpack:///./src/shared/copy/notifications/categories/template.ts","webpack:///./src/shared/copy/notifications/categories/variables-urlQueries.ts","webpack:///./src/client/mapsdRoutes.ts","webpack:///./src/visualization/types/Map/GeoOptions.scss","webpack:///./src/visualization/types/SingleStat/style.scss","webpack:///./src/visualization/types/Table/options.scss","webpack:///./src/flows/pipes/Table/view.scss","webpack:///./src/flows/pipes/Time/style.scss","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/ErrorThresholds.scss","webpack:///./src/flows/pipes/Visualization/style.scss","webpack:///./src/flows/pipes/Youtube/style.scss","webpack:///./src/style/chronograf.scss","webpack:///./assets/images/dashboard-empty--light.svg","webpack:///./assets/images/cubo_doodle.svg","webpack:///./assets/images/cubo_doodle_green.svg","webpack:///./assets/images/drag-n-drop.svg","webpack:///./assets/images/NotFoundBottom.png","webpack:///./assets/images/SlackIcon.png","webpack:///./assets/images/radial-power-level.svg","webpack:///./assets/images/auth-logo.svg","webpack:///./assets/images/plugin-simple.svg","webpack:///./assets/images/plan-graphic--free.svg","webpack:///./assets/images/checkout-overlay--success.svg","webpack:///./src/types/subscriptions.ts","webpack:///./src/labels/actions/creators.ts","webpack:///./src/shared/apis/query.ts","webpack:///./src/dataExplorer/context/persistance.tsx","webpack:///./src/dashboards/constants/index.ts","webpack:///./src/client/notebooksRoutes.ts","webpack:///./src/shared/components/WaitingText.tsx","webpack:///./src/client/index.ts","webpack:///./src/views/helpers/index.ts","webpack:///./src/timeMachine/utils/queryBuilder.ts","webpack:///./src/client/subscriptionsRoutes.ts","webpack:///./src/resources/constants/index.ts","webpack:///./src/resources/selectors/index.ts","webpack:///./src/shared/components/editable_description/EditableDescription.tsx","webpack:///./src/clockface/components/inputs/multipleInput/Row.tsx","webpack:///./src/clockface/components/inputs/multipleInput/MultipleRows.tsx","webpack:///./src/clockface/components/inputs/multipleInput/MultipleInput.tsx","webpack:///./src/clockface/components/wizard/WizardFullScreen.tsx","webpack:///./src/clockface/components/wizard/WizardOverlay.tsx","webpack:///./src/clockface/components/wizard/WizardProgressHeader.tsx","webpack:///./src/clockface/components/wizard/ProgressBar.tsx","webpack:///./src/clockface/components/context_menu/ContextMenuItem.tsx","webpack:///./src/clockface/components/context_menu/ContextMenu.tsx","webpack:///./src/clockface/types/index.ts","webpack:///./src/clockface/components/context_menu/Context.tsx","webpack:///./src/flows/context/flow.list.tsx","webpack:///./src/timeMachine/selectors/index.ts","webpack:///./src/flows/context/popup.tsx","webpack:///./src/dashboards/actions/ranges.ts","webpack:///./src/shared/constants/thresholds.ts","webpack:///./src/languageSupport/languages/flux/parser/index.ts","webpack:///./src/templates/api/index.ts","webpack:///./src/schemas/telegrafs.ts","webpack:///./src/identity/utils/shouldUseQuartzIdentity.ts","webpack:///./src/me/selectors/index.ts","webpack:///./src/flows/pipes/Notification/endpoints.ts","webpack:///./src/visualization/types/Check/icon.tsx","webpack:///./src/visualization/types/Check/properties.ts","webpack:///./src/shared/components/ThresholdMarker.tsx","webpack:///./src/shared/utils/useDragBehavior.ts","webpack:///./src/shared/components/ThresholdMarkerArea.tsx","webpack:///./src/shared/components/RangeThresholdMarkers.tsx","webpack:///./src/shared/components/LessThresholdMarker.tsx","webpack:///./src/shared/components/GreaterThresholdMarker.tsx","webpack:///./src/shared/components/ThresholdMarkers.tsx","webpack:///./src/shared/components/BoxTooltip.tsx","webpack:///./src/shared/components/EventMarkerTooltip.tsx","webpack:///./src/shared/components/EventMarker.tsx","webpack:///./src/shared/components/EventMarkers.tsx","webpack:///./src/visualization/types/Check/view.tsx","webpack:///./src/visualization/types/Check/index.tsx","webpack:///./src/flows/pipes/MetricSelector/context.tsx","webpack:///./src/flows/pipes/MetricSelector/MeasurementSelectors.tsx","webpack:///./src/flows/pipes/MetricSelector/FieldSelectors.tsx","webpack:///./src/flows/pipes/MetricSelector/TagSelectors.tsx","webpack:///./src/flows/pipes/MetricSelector/Selectors.tsx","webpack:///./src/flows/pipes/MetricSelector/FieldsList.tsx","webpack:///./src/flows/pipes/MetricSelector/FilterTags.tsx","webpack:///./src/flows/pipes/MetricSelector/SearchBar.tsx","webpack:///./src/flows/pipes/MetricSelector/view.tsx","webpack:///./src/flows/pipes/MetricSelector/readOnly.tsx","webpack:///./src/flows/pipes/MetricSelector/style.scss?18da","webpack:///./src/flows/pipes/MetricSelector/index.ts","webpack:///./src/flows/pipes/QueryBuilder/context.tsx","webpack:///./src/flows/pipes/QueryBuilder/AddButton.tsx","webpack:///./src/flows/pipes/QueryBuilder/MiniFileDnd.tsx","webpack:///./src/flows/pipes/QueryBuilder/ExplicitPanel.tsx","webpack:///./src/flows/pipes/QueryBuilder/CreateBucketOverlay.tsx","webpack:///./src/flows/pipes/QueryBuilder/CreateBucket.tsx","webpack:///./src/flows/pipes/QueryBuilder/BucketSelector.tsx","webpack:///./src/flows/pipes/QueryBuilder/CardList.tsx","webpack:///./src/flows/pipes/QueryBuilder/view.tsx","webpack:///./src/flows/pipes/QueryBuilder/readOnly.tsx","webpack:///./src/flows/pipes/QueryBuilder/style.scss?f37c","webpack:///./src/flows/pipes/QueryBuilder/index.ts","webpack:///./src/flows/pipes/Notification/Expression.tsx","webpack:///./src/flows/pipes/Notification/Expressions.tsx","webpack:///./src/flows/pipes/Notification/Threshold.scss?8d3e","webpack:///./src/flows/pipes/Notification/Measurement.tsx","webpack:///./src/flows/pipes/Notification/Threshold.tsx","webpack:///./src/flows/pipes/Notification/ExportTask.tsx","webpack:///./src/flows/pipes/Notification/styles.scss?496e","webpack:///./src/flows/pipes/Notification/view.tsx","webpack:///./src/flows/pipes/Notification/readOnly.tsx","webpack:///./src/flows/pipes/Notification/index.ts","webpack:///./src/flows/pipes/Visualization/QRCode.tsx","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/FieldColumnDropdown.tsx","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/FunctionDropdown.tsx","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/ErrorThresholds.scss?dd26","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/ThresholdEntryColumn.tsx","webpack:///./src/flows/pipes/Visualization/ErrorThresholds/ErrorThresholds.tsx","webpack:///./src/flows/pipes/Visualization/Controls.tsx","webpack:///./src/flows/pipes/Visualization/view.tsx","webpack:///./src/flows/pipes/Visualization/style.scss?a268","webpack:///./src/flows/pipes/Visualization/index.ts","webpack:///./src/visualization/types/Map/icon.tsx","webpack:///./src/visualization/types/Map/properties.ts","webpack:///./src/visualization/types/Map/view.tsx","webpack:///./src/visualization/types/Map/utils.ts","webpack:///./src/visualization/types/Map/GeoOptions.scss?6f25","webpack:///./src/visualization/types/Map/S2ColumnOptions.tsx","webpack:///./src/visualization/types/Map/LatLonColumnOptions.tsx","webpack:///./src/visualization/types/Map/GeoOptions.tsx","webpack:///./src/visualization/types/Map/index.tsx","webpack:///./src/visualization/types/Table/icon.tsx","webpack:///./src/visualization/types/Table/properties.ts","webpack:///./src/shared/components/draggable_column/DraggableColumn.tsx","webpack:///./src/shared/utils/move.ts","webpack:///./src/visualization/types/Table/options.scss?859a","webpack:///./src/visualization/types/Table/options.tsx","webpack:///./src/visualization/types/Table/view.tsx","webpack:///./src/timeMachine/utils/rawFluxDataTable.ts","webpack:///./src/visualization/types/Table/index.tsx","webpack:///./src/visualization/types/Graph/icon.tsx","webpack:///./src/visualization/types/Graph/properties.ts","webpack:///./src/visualization/components/internal/AdaptiveZoomOption.tsx","webpack:///./src/visualization/types/Graph/options.tsx","webpack:///./src/visualization/types/Graph/view.tsx","webpack:///./src/visualization/utils/useZoomQuery.ts","webpack:///./src/visualization/types/Graph/index.tsx","webpack:///./src/visualization/types/Band/icon.tsx","webpack:///./src/visualization/types/Band/properties.ts","webpack:///./src/visualization/types/Band/options.tsx","webpack:///./src/visualization/types/Band/view.tsx","webpack:///./src/visualization/utils/useBandColumns.ts","webpack:///./src/visualization/types/Band/index.tsx","webpack:///./src/visualization/types/Gauge/icon.tsx","webpack:///./src/visualization/types/Gauge/properties.ts","webpack:///./src/visualization/types/Gauge/options.tsx","webpack:///./src/visualization/types/Gauge/constants.ts","webpack:///./src/visualization/types/Gauge/view.tsx","webpack:///./src/visualization/types/Gauge/index.tsx","webpack:///./src/visualization/types/Scatter/icon.tsx","webpack:///./src/visualization/types/Scatter/properties.ts","webpack:///./src/visualization/types/Scatter/TimeAutoToggle.tsx","webpack:///./src/visualization/types/Scatter/options.tsx","webpack:///./src/visualization/types/Scatter/view.tsx","webpack:///./src/visualization/types/Scatter/index.tsx","webpack:///./src/visualization/types/SingleStat/icon.tsx","webpack:///./src/visualization/types/SingleStat/properties.ts","webpack:///./src/visualization/types/SingleStat/options.tsx","webpack:///./src/visualization/types/SingleStat/style.scss?ae23","webpack:///./src/visualization/types/SingleStat/view.tsx","webpack:///./src/visualization/types/SingleStat/index.tsx","webpack:///./src/flows/pipes/Markdown/MarkdownModeToggle.tsx","webpack:///./src/flows/pipes/Markdown/view.tsx","webpack:///./src/flows/pipes/Markdown/readOnly.tsx","webpack:///./src/flows/pipes/Markdown/style.scss?f582","webpack:///./src/flows/pipes/Markdown/index.ts","webpack:///./src/flows/pipes/RawFluxEditor/SecretsList.tsx","webpack:///./src/flows/pipes/RawFluxEditor/style.scss?21b5","webpack:///./src/flows/pipes/RawFluxEditor/view.tsx","webpack:///./src/flows/pipes/RawFluxEditor/readOnly.tsx","webpack:///./src/flows/pipes/RawFluxEditor/index.ts","webpack:///./src/flows/pipes/Schedule/History.tsx","webpack:///./src/flows/pipes/Schedule/style.scss?970e","webpack:///./src/flows/pipes/Schedule/view.tsx","webpack:///./src/flows/pipes/Schedule/readOnly.tsx","webpack:///./src/flows/pipes/Schedule/index.ts","webpack:///./src/flows/pipes/Spotify/embedded.tsx","webpack:///./src/flows/pipes/Spotify/editor.tsx","webpack:///./src/flows/pipes/Spotify/view.tsx","webpack:///./src/flows/pipes/Spotify/style.scss?c889","webpack:///./src/flows/pipes/Spotify/index.ts","webpack:///./src/visualization/types/Heatmap/icon.tsx","webpack:///./src/visualization/types/Heatmap/properties.ts","webpack:///./src/visualization/types/Heatmap/options.tsx","webpack:///./src/visualization/types/Heatmap/view.tsx","webpack:///./src/visualization/types/Heatmap/index.tsx","webpack:///./src/visualization/types/Histogram/icon.tsx","webpack:///./src/visualization/types/Histogram/properties.ts","webpack:///./src/visualization/types/Histogram/options.tsx","webpack:///./src/visualization/types/Histogram/view.tsx","webpack:///./src/visualization/types/Histogram/index.tsx","webpack:///./src/visualization/types/Mosaic/icon.tsx","webpack:///./src/visualization/types/Mosaic/properties.ts","webpack:///./src/visualization/types/Mosaic/view.tsx","webpack:///./src/visualization/types/Mosaic/options.tsx","webpack:///./src/visualization/types/Mosaic/index.tsx","webpack:///./src/visualization/types/SingleStatWithLine/icon.tsx","webpack:///./src/visualization/types/SingleStatWithLine/properties.ts","webpack:///./src/visualization/types/SingleStatWithLine/options.tsx","webpack:///./src/visualization/types/SingleStatWithLine/view.tsx","webpack:///./src/visualization/types/SingleStatWithLine/index.tsx","webpack:///./src/flows/pipes/Columns/styles.scss?b53a","webpack:///./src/flows/pipes/Columns/view.tsx","webpack:///./src/flows/pipes/Columns/readOnly.tsx","webpack:///./src/flows/pipes/Columns/index.tsx","webpack:///./src/flows/pipes/Downsample/view.tsx","webpack:///./src/flows/pipes/Downsample/readOnly.tsx","webpack:///./src/flows/pipes/Downsample/style.scss?0184","webpack:///./src/flows/pipes/Downsample/index.ts","webpack:///./src/flows/pipes/Region/style.scss?848f","webpack:///./src/flows/pipes/Region/view.tsx","webpack:///./src/flows/pipes/Region/readOnly.tsx","webpack:///./src/flows/pipes/Region/index.ts","webpack:///./src/flows/pipes/Missing/view.tsx","webpack:///./src/flows/pipes/Missing/styles.scss?168f","webpack:///./src/flows/pipes/Missing/index.ts","webpack:///./src/flows/pipes/RemoteCSV/view.tsx","webpack:///./src/flows/pipes/RemoteCSV/styles.scss?7698","webpack:///./src/flows/pipes/RemoteCSV/index.ts","webpack:///./src/flows/pipes/Table/view.scss?c9eb","webpack:///./src/flows/pipes/Table/view.tsx","webpack:///./src/flows/pipes/Table/index.ts","webpack:///./src/shared/decorators/errors.tsx","webpack:///./src/flows/pipes/Time/style.scss?df44","webpack:///./src/flows/pipes/Time/view.tsx","webpack:///./src/flows/pipes/Time/index.ts","webpack:///./src/flows/pipes/ToBucket/view.tsx","webpack:///./src/flows/pipes/ToBucket/readOnly.tsx","webpack:///./src/flows/pipes/ToBucket/index.ts","webpack:///./src/flows/pipes/Youtube/view.tsx","webpack:///./src/flows/pipes/Youtube/style.scss?604d","webpack:///./src/flows/pipes/Youtube/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/AWS/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/AWS/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/AWS/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/HTTP/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/HTTP/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/HTTP/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/Mailgun/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Mailgun/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Mailgun/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/Mailjet/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Mailjet/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Mailjet/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/PagerDuty/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/PagerDuty/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/PagerDuty/index.ts","webpack:///./src/tasks/actions/creators.ts","webpack:///./src/flows/pipes/Notification/endpoints/SendGrid/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/SendGrid/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/SendGrid/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/Slack/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Slack/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Slack/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/Telegram/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Telegram/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Telegram/index.ts","webpack:///./src/flows/pipes/Notification/endpoints/Zenoss/view.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Zenoss/readOnly.tsx","webpack:///./src/flows/pipes/Notification/endpoints/Zenoss/index.ts","webpack:///./src/visualization/types/SimpleTable/options.tsx","webpack:///./src/visualization/types/SimpleTable/icon.tsx","webpack:///./src/visualization/types/SimpleTable/index.tsx","webpack:///./src/dataExplorer/components/resources/types/script/editor.tsx","webpack:///./src/dataExplorer/components/resources/types/script/index.ts","webpack:///./src/identity/apis/auth.ts","webpack:///./src/shared/components/EmptyGraphMessage.tsx","webpack:///./src/views/actions/creators.ts","webpack:///./src/telegrafs/actions/creators.ts","webpack:///./src/shared/apis/queryCache.ts","webpack:///./src/variables/utils/buildVarsOption.ts","webpack:///./src/shared/selectors/app.ts","webpack:///./src/shared/components/dateRangePicker/DatePicker.tsx","webpack:///./src/overlays/actions/overlays.ts","webpack:///./src/dataLoaders/graphics/LogoCpu.tsx","webpack:///./src/dataLoaders/graphics/LogoDocker.tsx","webpack:///./src/dataLoaders/graphics/LogoKubernetes.tsx","webpack:///./src/dataLoaders/graphics/LogoNginx.tsx","webpack:///./src/dataLoaders/graphics/LogoRedis.tsx","webpack:///./src/dataLoaders/constants/pluginConfigs.ts","webpack:///./src/authorizations/actions/creators.ts","webpack:///./src/authorizations/apis/index.ts","webpack:///./src/labels/constants/index.ts","webpack:///./src/variables/utils/getWindowVars.ts","webpack:///./src/shared/contexts/buckets.tsx","webpack:///./src/annotations/selectors/index.ts","webpack:///./src/checks/utils/context.tsx","webpack:///./src/dashboards/actions/creators.ts","webpack:///./src/identity/selectors/index.ts","webpack:///./src/shared/utils/toComponentStatus.ts","webpack:///./src/shared/components/SearchableDropdown.tsx","webpack:///./src/visualization/utils/timeFormat.ts","webpack:///./src/visualization/utils/annotationUtils.ts","webpack:///./src/visualization/utils/getFormatter.ts","webpack:///./src/visualization/utils/useVisDomainSettings.ts","webpack:///./src/flows/context/pipe.tsx","webpack:///./src/visualization/utils/colorMappingUtils.ts","webpack:///./src/visualization/types/SimpleTable/view.tsx","webpack:///./src/client/annotationdRoutes.ts","webpack:///./src/annotations/utils/formatQueryString.ts","webpack:///./src/annotations/api/index.ts","webpack:///./src/annotations/actions/thunks.ts","webpack:///./src/shared/components/functions/perFunction/FluxDocsTooltipContent.tsx","webpack:///./src/shared/utils/functions.ts","webpack:///./src/shared/components/DynamicFunctionsList.tsx","webpack:///./src/shared/components/functions/perFunction/FunctionToolTipContent.tsx","webpack:///./src/shared/components/GroupedFunctionsList.tsx","webpack:///./src/timeMachine/actions/index.ts","webpack:///./src/shared/actions/app.ts","webpack:///./src/shared/actions/currentExplorer.ts","webpack:///./src/dataLoaders/utils/pluginConfigs.ts","webpack:///./src/variables/actions/creators.ts","webpack:///./src/buckets/actions/creators.ts","webpack:///./src/labels/utils/index.ts","webpack:///./src/shared/utils/dateTimeUtils.ts","webpack:///./src/schemas/tasks.ts","webpack:///./src/secrets/components/SecretsDropdown.tsx","webpack:///./src/visualization/components/internal/HoverLegend.tsx","webpack:///./src/visualization/utils/useLegendOpacity.ts","webpack:///./src/alerting/utils/vis.ts","webpack:///./src/dataExplorer/shared/utils.ts","webpack:///./src/views/selectors/index.ts","webpack:///./src/client/uiproxydRoutes.ts","webpack:///./src/flows/index.ts","webpack:///./src/shared/components/EmptyGraphErrorTooltip.tsx","webpack:///./src/shared/components/EmptyGraphError.tsx","webpack:///./src/shared/copy/cell.ts","webpack:///./src/shared/components/EmptyQueryView.tsx","webpack:///./src/cloud/apis/reporting.ts","webpack:///./src/cloud/utils/reporting.ts","webpack:///./src/schemas/secrets.ts","webpack:///./src/secrets/actions/thunks.ts","webpack:///./src/shared/components/TagSelectorCount.scss?5bff","webpack:///./src/shared/components/TagSelectorCount.tsx","webpack:///./src/cells/actions/creators.ts","webpack:///./src/templates/actions/creators.ts","webpack:///./src/schemas/authorizations.ts","webpack:///./src/variables/utils/getTimeRangeVars.ts","webpack:///./src/templates/utils/index.ts","webpack:///./src/flows/constants.ts","webpack:///./src/flows/context/results.tsx","webpack:///./src/shared/components/AutoDomainInput.tsx","webpack:///./src/utils/datetime/validator.ts","webpack:///./src/visualization/utils/useAxisTicksGenerator.ts","webpack:///./src/dashboards/apis/index.ts","webpack:///./src/client/generatedRoutes.ts","webpack:///./src/visualization/components/internal/ValueTickInput.tsx","webpack:///./src/visualization/components/internal/TimeTickInput.tsx","webpack:///./src/visualization/components/internal/AxisTicksGenerator.tsx","webpack:///./src/utils/autoAggregateRequirements.ts","webpack:///./src/views/actions/thunks.ts","webpack:///./src/utils/SafeBlankLink.tsx","webpack:///./src/utils/basepath.ts","webpack:///./src/shared/copy/notifications/categories/help-and-support.ts","webpack:///./src/clockface/constants/wizard.ts","webpack:///./src/perf/actions/index.ts","webpack:///./src/utils/formatting.ts","webpack:///./src/schemas/checks.ts","webpack:///./src/shared/utils/ast.ts","webpack:///./src/shared/utils/filterUnusedVars.ts","webpack:///./src/schemas/variables.ts","webpack:///./src/schemas/endpoints.ts","webpack:///./src/schemas/rules.ts","webpack:///./src/writeData/subscriptions/context/api.tsx","webpack:///./src/shared/constants/queryBuilder.ts","webpack:///./src/shared/components/DurationSelector.tsx","webpack:///./src/visualization/components/internal/ColorSchemeDropdown.tsx","webpack:///./src/buckets/api/index.ts","webpack:///./src/types/index.ts","webpack:///./src/shared/components/ErrorBoundary.tsx","webpack:///./src/flows/context/flow.current.tsx","webpack:///./src/cloud/utils/limits.ts","webpack:///./src/shared/components/ColorDropdown.tsx","webpack:///./src/shared/components/ThresholdSetting.tsx","webpack:///./src/visualization/components/internal/utils.ts","webpack:///./src/visualization/components/internal/ThresholdsSettings.tsx","webpack:///./src/shared/utils/useOneWayReducer.ts","webpack:///./src/shared/actions/flags.ts","webpack:///./src/scrapers/actions/creators.ts","webpack:///./src/members/actions/creators.ts","webpack:///./src/cloud/constants/index.ts","webpack:///./src/variables/selectors/index.tsx","webpack:///./src/client/cloudPrivRoutes.ts","webpack:///./src/shared/containers/index.tsx","webpack:///./src/variables/utils/astim.ts","webpack:///./src/shared/selectors/currentContext.ts","webpack:///./src/flows/pipes/Visualization/threshold.ts","webpack:///./src/secrets/components/CreateSecret/CreateSecretForm.tsx","webpack:///./src/flows/context/variables.tsx","webpack:///./src/shared/constants/colorOperations.ts","webpack:///./src/dashboards/utils/notes.ts","webpack:///./src/timeMachine/components/builderCard/BuilderCardHeader.tsx","webpack:///./src/timeMachine/components/builderCard/BuilderCardDropdownHeader.tsx","webpack:///./src/timeMachine/components/builderCard/BuilderCardMenu.tsx","webpack:///./src/timeMachine/components/builderCard/BuilderCardBody.tsx","webpack:///./src/timeMachine/components/builderCard/BuilderCardEmpty.tsx","webpack:///./src/timeMachine/components/builderCard/BuilderCard.tsx","webpack:///./src/cloud/actions/limits.ts","webpack:///./src/timeMachine/actions/queries.ts","webpack:///./src/shared/middleware/resizeLayout.ts","webpack:///./src/shared/middleware/queryStringConfig.ts","webpack:///./src/shared/reducers/app.ts","webpack:///./src/shared/reducers/currentDashboard.ts","webpack:///./src/shared/reducers/notifications.ts","webpack:///./src/shared/reducers/index.ts","webpack:///./src/identity/reducers/index.ts","webpack:///./src/shared/reducers/flags.ts","webpack:///./src/shared/reducers/currentExplorer.ts","webpack:///./src/shared/reducers/fluxDocs.ts","webpack:///./src/tasks/reducers/helpers.ts","webpack:///./src/resources/reducers/helpers.ts","webpack:///./src/tasks/reducers/index.ts","webpack:///./src/dashboards/reducers/ranges.ts","webpack:///./src/dashboards/reducers/dashboards.ts","webpack:///./src/cells/reducers/index.ts","webpack:///./src/views/reducers/index.ts","webpack:///./src/organizations/reducers/index.ts","webpack:///./src/overlays/reducers/overlays.ts","webpack:///./src/onboarding/reducers/index.ts","webpack:///./src/dashboards/reducers/notes.ts","webpack:///./src/dataLoaders/reducers/dataLoaders.ts","webpack:///./src/dataLoaders/reducers/steps.ts","webpack:///./src/dataLoaders/reducers/index.tsx","webpack:///./src/variables/reducers/editor.ts","webpack:///./src/variables/reducers/index.ts","webpack:///./src/labels/reducers/index.ts","webpack:///./src/buckets/reducers/index.ts","webpack:///./src/telegrafs/reducers/index.ts","webpack:///./src/authorizations/reducers/index.ts","webpack:///./src/templates/reducers/index.ts","webpack:///./src/scrapers/reducers/index.ts","webpack:///./src/userSettings/reducers/index.ts","webpack:///./src/annotations/reducers/index.ts","webpack:///./src/members/reducers/index.ts","webpack:///./src/shared/reducers/autoRefresh.ts","webpack:///./src/cloud/reducers/limits.ts","webpack:///./src/checks/reducers/index.ts","webpack:///./src/notifications/rules/reducers/index.ts","webpack:///./src/notifications/endpoints/reducers/index.ts","webpack:///./src/secrets/reducers/index.ts","webpack:///./src/dataLoaders/reducers/telegrafEditor.ts","webpack:///./src/alerting/reducers/alertBuilder.ts","webpack:///./src/perf/reducers/index.ts","webpack:///./src/identity/quartzOrganizations/reducers/index.ts","webpack:///./src/store/configureStore.ts","webpack:///./src/store/persistStateEnhancer.ts","webpack:///./src/client/unityRoutes.ts","webpack:///./src/normalizers/localStorage/dashboardTime.ts","webpack:///./src/normalizers/localStorage/appPersisted.ts","webpack:///./src/normalizers/localStorage/resources.ts","webpack:///./src/localStorage.ts","webpack:///./src/normalizers/localStorage/localStorage.ts","webpack:///./src/shared/selectors/notifications.ts","webpack:///./src/shared/components/notifications/Notifications.tsx","webpack:///./src/identity/utils/convertIdentityToMe.ts","webpack:///./src/identity/actions/thunks/index.ts","webpack:///./src/shared/contexts/app.tsx","webpack:///./src/types/colors.ts","webpack:///./src/types/dashboards.ts","webpack:///./src/me/reducers/index.ts","webpack:///./src/alerting/constants/index.ts","webpack:///./src/me/actions/creators/index.ts","webpack:///./src/types/overlay.ts","webpack:///./src/types/promises.ts","webpack:///./src/types/resources.ts","webpack:///./src/types/timeZones.ts","webpack:///./src/shared/copy/notifications/categories/alerts.ts","webpack:///./src/shared/selectors/flags.ts","webpack:///./src/organizations/actions/creators.ts","webpack:///./src/shared/utils/validateURI.ts","webpack:///./src/timeMachine/constants/queryBuilder.ts","webpack:///./src/annotations/actions/creators.ts","webpack:///./src/checks/actions/creators.ts","webpack:///./src/notifications/rules/actions/creators.ts","webpack:///./src/notifications/endpoints/actions/creators.ts","webpack:///./src/identity/components/GlobalHeader/DefaultEntities.tsx","webpack:///./src/organizations/actions/thunks.ts","webpack:///./src/shared/apis/singleQuery.ts","webpack:///./src/alerting/utils/statusEvents.ts","webpack:///./src/timeMachine/apis/queryBuilder.ts","webpack:///./src/shared/components/FilterList/InjectionOption.tsx","webpack:///./src/shared/utils/useOneWayState.ts","webpack:///./src/alerting/actions/alertBuilder.ts","webpack:///./src/visualization/utils/useStaticLegend.ts","webpack:///./src/shared/constants/index.ts","webpack:///./src/shared/utils/sort.ts","webpack:///./src/users/hooks/useEvent.tsx","webpack:///./src/flows/context/flow.query.tsx","webpack:///./src/shared/utils/pageTitles.ts","webpack:///./src/dashboards/selectors/index.ts"],"names":["options","locals","className","glyph","CuboSolid","fill","White","cloud","children","element","H6","weight","Regular","selectable","LoginForm","buttonStatus","emailValidation","email","passwordValidation","password","handleInputChange","handleForgotPasswordClick","isVisible","toggleVisibility","Row","Column","widthXS","Twelve","Element","label","required","errorMessage","name","value","type","Email","size","Large","status","hasError","Error","Default","onChange","visible","onToggleClick","direction","justifyContent","SpaceBetween","href","onClick","text","color","Primary","Submit","shape","StretchToFit","SocialButton","buttonText","handleClick","GoogleLogo","x","y","viewBox","d","MicrosoftLogo","microsoftClassname","width","height","state","emailError","passwordError","getAuth0Config","async","redirectTo","config","this","auth0","WebAuth","domain","clientID","redirectUri","redirectURL","responseType","error","console","formFieldTypeFactory","handleSubmit","event","preventDefault","connection","authorize","e","isValid","errors","validateFieldValues","setState","Loading","login","realm","Authentication","displayErrorMessage","auth0Err","test","code","target","handleSocialClick","onNotify","props","changePassword","successMessage","message","componentDidMount","interval","setInterval","componentWillUnmount","clearInterval","render","action","method","Post","onSubmit","Header","Center","P","Body","stretchToFitWidth","alignItems","margin","Google","Microsoft","Object","values","every","mdtp","LoginPage","hasValidSession","setHasValidSession","getSessionValidity","history","length","push","goBack","url","URL","warn","window","location","replace","ErrorBoundary","Notifications","enableGraphic","logo","H1","org","orgs","Orgs","id","NoOrgsPage","NotebookTemplates","App","NotFound","identity","quartzMeStatus","quartzMe","quartzIdentityStatus","meId","account","currentIdentity","dispatch","identityOrgId","shouldUseQuartzIdentity","isRegionBeta","NotStarted","orgID","accountID","accountName","Done","accountType","account_type","accountCreatedAt","account_created_at","orgId","dataLayer","organization_id","PageSpinner","loading","fallback","path","component","toLowerCase","exact","me","isOperator","getCloudPublicFlags","getFlags","flags","resp","data","entries","reduce","prev","key","val","spinnerComponent","constructor","super","getIdpeMeThunk","Props","auth","hasMounted","checkForLogin","pathname","intervalID","origin","startsWith","returnTo","notify","onGetPublicFlags","OnboardingWizardPage","SigninPage","Logout","ReadOnlyNotebook","allowed","match","prevProps","prevState","includes","rootNode","cookieSession","document","cookie","RegExp","session","slice","search","listen","addEventListener","keyCode","store","TIME_RANGE_FORMAT","CUSTOM_TIME_RANGE_LABEL","pastHourTimeRange","seconds","lower","upper","duration","windowPeriod","pastThirtyDaysTimeRange","pastDayTimeRange","SELECTABLE_TIME_RANGES","SELECTABLE_USAGE_TIME_RANGES","DEFAULT_USAGE_TIME_RANGE","DEFAULT_TIME_RANGE","resolveSelectedKey","prevSelection","defaultSelection","valueFetcher","cache","fetch","query","variables","skipCache","abortController","formatVarsOption","cacheKey","cachedValues","promise","Promise","resolve","cancel","extern","request","context","then","result","reject","csv","table","getColumn","valueType","selected","Set","sort","getColumnType","extractValues","getVarChildren","arguments","allVariables","astim","filter","maybeChild","hasVariable","collectAncestors","node","acc","parent","parents","has","add","errorVariableValues","collectDescendants","child","readyToResolve","findCyclicPath","findCyclicPathHelper","cyclicPath","seen","variable","hydrateVars","graph","subgraph","varIDs","map","v","some","ancestor","findSubgraph","nodesByID","curr","keys","k","forEach","c","createVariableGraph","n","invalidNode","invalidateCycles","isCancelled","on","variableType","fire","descendants","fetcher","controller","hydrateVarsHelper","results","all","ancestors","invalidateAncestors","deferred","callbacks","ret","evt","cb","hasOwnProperty","args","apply","findLeaves","extractResult","getVariables","getState","Variables","signal","varsByID","entities","hydrateVariables","vars","views","currentPage","dashboardID","currentDashboard","resources","byID","view","getActiveView","activeQuery","usedVars","filterUnusedVars","hydration","_variable","createVariable","createdVar","createVariableFromTemplate","template","variableName","spec","metadata","updateVariable","labels","variableID","deleteVariable","moveVariable","originalIndex","newIndex","contextID","currentContext","byDashboardVariables","oldDashboardVarOrder","temp","sort_order","catch","err","addVariableLabelAsync","posted","labelID","removeVariableLabelAsync","deleted","selectValue","DOCS_URL_VERSION","process","env","CLOUD_URL","FROM","desc","package","example","category","link","UNION","FLUX_FUNCTIONS","removeTagSelector","index","cancelFindValues","cancelFindKeys","loadTagSelector","loadTagSelectorValues","startTime","Date","now","buckets","tags","builderConfig","tagsSelections","bucket","foundBucket","Buckets","find","b","timeRange","searchTerm","queryBuilder","valuesSearchTerm","findValues","selectedValues","selectedValue","unshift","time","keysSearchTerm","findKeys","defaultKey","loadBuckets","bucketsResponse","normalizedBuckets","allBuckets","systemBuckets","selectedBucket","selectBucket","setWindowPeriodSelectionMode","mode","selectAggregateWindow","period","resetSelections","selectTagValue","timeMachines","activeTimeMachineID","currentTag","newValues","aggregateFunctionType","addTagSelector","multiSelectBuilderFunction","draftQueries","activeQueryIndex","functionNames","functions","f","singleSelectBuilderFunction","selectTagKey","searchTagValues","searchTagKeys","reloadTagSelectors","setBuilderBucketIfExists","bucketName","getOrg","removeSpacesAndNow","input","isDurationWithNowParseable","isDurationParseable","parseDuration","durationRegExp","exec","magnitude","unit","UNIT_TO_APPROX_MS","ns","us","ms","s","m","h","w","mo","durationToMilliseconds","sum","millisecondsToDuration","unitsAndMs","a","durations","unitIndex","remainder","unitAsMs","valueInUnit","Math","floor","areDurationsEqual","timeRangeToDuration","convertTimeRangeToCustom","toISOString","lowerDate","setSeconds","getSeconds","millisecondDuration","setMilliseconds","getMilliseconds","getTimeRangeLabel","timeZone","singleDirection","formatter","format","Upper","Lower","MIN_DECIMAL_PLACES","MAX_DECIMAL_PLACES","AXES_SCALE_OPTIONS","LINEAR","LOG","BASE_2","BASE_10","INVALID_DATA_COPY","BAND_LINE_OPACITY","BAND_LINE_WIDTH","BAND_SHADE_OPACITY","LegendDisplayStatus","LEGEND_OPACITY_MINIMUM","LEGEND_OPACITY_MAXIMUM","LEGEND_OPACITY_DEFAULT","LEGEND_OPACITY_STEP","LEGEND_ORIENTATION_THRESHOLD_VERTICAL","LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL","LEGEND_ORIENTATION_THRESHOLD_DEFAULT","LEGEND_COLORIZE_ROWS_DEFAULT","LEGEND_HIDE_DEFAULT","STATIC_LEGEND_HEIGHT_RATIO_MINIMUM","STATIC_LEGEND_HEIGHT_RATIO_MAXIMUM","STATIC_LEGEND_HEIGHT_RATIO_DEFAULT","STATIC_LEGEND_HEIGHT_RATIO_NOT_SET","STATIC_LEGEND_HEIGHT_RATIO_STEP","STATIC_LEGEND_SHOW_DEFAULT","STATIC_LEGEND_WIDTH_RATIO_DEFAULT","STATIC_LEGEND_CELL_HEIGHT_DEFAULT","STATIC_LEGEND_STYLING","backgroundColor","border","style","padding","staticLegendTypes","TICK_PROPERTY_PREFIX","TICK_PROPERTY_SUFFIX","SUGGESTION_CLASS","suggestions","placeholder","controlledStatus","submitInvalid","showDivider","testID","validFunction","customClass","dividerText","dividerOnClick","menuMaxHeight","arrowButtonOn","isFocused","setIsFocused","inputValue","setInputValue","handleClickSuggestion","suggestion","i","inputStatus","onClickOutside","classList","contains","parentNode","onFocus","onKeyPress","icon","CaretUp_New","CaretDown_New","noScrollX","maxHeight","Item","OverrideMechanism","trimPartialLines","partialResp","DEFAULT_CONTEXT","basic","_","__","___","QueryContext","createContext","FALLBACK_WINDOW_PERIOD","Array","isArray","_val","remove","ni","splice","_addWindowPeriod","ast","optionAST","NOW","queryRanges","callee","properties","start","stop","starts","t","stops","cartesianProduct","concat","queryDuration","min","foundDuration","tr","round","joinOption","optionName","defaults","joinedOption","assignment","init","_acc","_curr","source","optionVals","join","parseQuery","simplify","params","referencedVars","object","property","variableOption","body","referencedParams","paramOption","taskOption","qs","q","btoa","updateWindowPeriod","override","task","optionTexts","_k","_v","queryAST","timeRangeStart","timeRangeStop","range","_optionAST","JSON","parse","stringify","files","QueryProvider","pending","current","mechanism","overrideMechanism","AST","Inline","region","URLSearchParams","headers","token","dialect","annotations","AbortController","response","reader","getReader","decoder","TextDecoder","bytesRead","didTruncate","read","BYTE_LIMIT","done","decode","byteLength","retryAfter","get","parseInt","json","abort","queryID","Provider","raw","parsed","getReadableRetention","expire","retentionRules","rule","everySeconds","bucketSchema","Entity","processStrategy","readableRetention","arrayOfBuckets","memberSchema","Members","arrayOfMembers","orgSchema","arrayOfOrgs","scraperSchema","Scrapers","arrayOfScrapers","Templates","eventPrefix","update","staticLegend","colorizeRows","heightRatio","opacity","orientationThreshold","show","widthRatio","valueAxis","showOptions","setShowOptions","handleChooseStaticLegend","SHOW","handleSetValueAxis","Option","titleText","active","HIDE","eventName","graphType","legendOrientation","parentName","handleSetOrientation","threshold","validThreshold","legendOpacity","handleSetOpacity","convertUserInput","isNaN","legendColorizeRows","handleSetColorization","tabIndex","checked","Radio","ExtraSmall","appearance","Outline","htmlFor","toFixed","convertHeightRatioToPercentage","max","step","hideLabels","dateTimeOptions","hourCycle","day","month","year","hour","minute","second","timeOptions","relativeDivisions","scale","createRelativeFormatter","numeric","Intl","RelativeTimeFormat","formatRelative","date","millisecondsAgo","getTime","abs","createDateTimeFormatter","DateTimeFormat","parts","formatToParts","dateParts","part","hour12","dayPeriod","timeZoneName","fractionalSecondDigits","fractionalSecond","weekday","timeParts","convertDateToRFC3339","toDateString","getFullYear","getMonth","dayOfMonth","getDate","timeStringParsed","toTimeString","split","getErrorMessage","SidebarContext","menu","hide","showSub","hideSub","register","SidebarProvider","flow","focused","setFocused","pipes","setPipes","sub","setSub","submenu","allIDs","downloadTextFile","filename","extension","mimeType","formattedName","trim","formatDownloadName","blob","Blob","createElement","createObjectURL","download","appendChild","click","removeChild","downloadImage","uri","open","getRootNode","getElementById","LOGIN","LOGOUT","SIGNIN","BUCKETS","DASHBOARDS","DASHBOARD_ID","ORGS","ORG_ID","CONTENT_ID","SECRETS","SCRAPERS","SETTINGS","TELEGRAFS","TOKENS","VARIABLES","TEMPLATES","LOAD_DATA","LABELS","FILE_UPLOAD","CLIENT_LIBS","TELEGRAF_PLUGINS","DATA_EXPLORER","SUBSCRIPTIONS","Auth0Connection","AutoRefreshStatus","WritePrecision","WriteDataMode","RemoteDataState","InnerView","cellID","isInitial","transmitWindowPeriod","SUPPORTED_VISUALIZATIONS","fallbackNote","hasResults","EmptyQueryView","errorFormat","Scroll","isInitialFetch","hideTimer","ViewLoadingSpinner","viewType","onUpdateType","items","def","disabled","featureFlag","localeCompare","graphic","button","Button","Disabled","Valid","onCollapse","Menu","theme","Onyx","supportedVisualizations","visualizationDefintionContext","visualizationDefinitionIndexFile","default","visualization","buildSupportedVisualizations","NotificationStyle","TimeRangeDirection","SourceAuthenticationMethod","TaskSchedule","TemplateType","SET_CURRENT_DASHBOARD","setDashboard","isDate","validateAndTypeRange","selectableTimeRange","r","SET_QUARTZ_IDENTITY","SET_QUARTZ_IDENTITY_STATUS","SET_CURRENT_BILLING_PROVIDER","SET_CURRENT_ORG_DETAILS","setQuartzIdentity","setCurrentBillingProvider","billingProvider","setCurrentOrgDetails","orgDetails","setQuartzIdentityStatus","setCurrentPage","initialStateHelper","autoRefresh","hidden","isViewingRawData","isViewingVisOptions","activeTab","queryResults","initialQueryResultsState","bucketsStatus","aggregateWindow","fillValues","keysStatus","valuesStatus","getTableProperties","fieldOptions","pointer","indexOf","existing","internalName","o","displayName","timeMachinesReducer","veo","de","alerting","initialState","payload","activeTimeMachine","queries","initialQueryBuilderState","newActiveTimeMachine","timeMachineReducer","draftState","buildAllQueries","convertView","fetchDuration","statuses","setViewProperties","geom","bounds","setYAxis","prefix","axis","xPrefix","yPrefix","suffix","xSuffix","ySuffix","base","xColumn","yColumn","ySeriesColumns","yLabelColumns","yLabelColumnSeparator","xAxisLabel","yAxisLabel","fillColumns","symbolColumns","position","upperColumn","mainColumn","lowerColumn","legendOrientationThreshold","legendHide","binCount","binSize","colors","xDomain","yDomain","generateXAxisTicks","generateYAxisTicks","xTotalTicks","xTickStart","xTickStep","yTotalTicks","yTickStart","yTickStep","tickPrefix","tickSuffix","updateCorrectColors","decimalPlaces","shadeBelow","hoverDimension","viewColors","editMode","resetBuilderState","queryIndex","queryLength","draftQuery","builderAggregateFunctionType","buildActiveQuery","initValues","defaultAggregateFunctionType","tag","undefined","initialTags","functionsWithNames","queryName","workingView","option","field","idx","tableOptions","timeFormat","axes","yAxis","outType","newView","links","defaultFunctions","defaultTag","newBuilderConfig","getDeep","obj","OPTION_NAME","TIME_RANGE_START","TIME_RANGE_STOP","WINDOW_PERIOD","BOUNDARY_GROUP","variableItemTypes","SET_SECRETS","SET_SECRET","REMOVE_SECRET","setSecrets","schema","setSecret","removeSecret","SET_QUARTZ_ORGANIZATIONS","SET_QUARTZ_ORGANIZATIONS_STATUS","SET_QUARTZ_DEFAULT_ORG","setQuartzOrganizations","quartzOrganizations","setQuartzOrganizationsStatus","setQuartzDefaultOrg","newDefaultOrgId","basepath","basename","display","placeContent","getMinDurationFromAST","times","isRangeNode","rangeNode","startProperty","p","propertyTime","endProperty","end","rangeTimes","allRangeTimes","argument","lookupVariable","leftTime","left","rightDuration","right","operator","objName","propertyName","isTimeCall","declarator","SearchWidget","handleSearch","onSearch","handleBlur","handleChange","clear","componentDidUpdate","UNSAFE_componentWillMount","placeholderText","autoFocus","Search_New","onBlur","onClear","defaultProps","widthPixels","Small","getTimezoneOffset","lines","getAssignmentVariables","assignments","formatExpression","expr","String","templateDefintionContext","templateDefinitionIndexFile","DEFAULT_API_FLOW","stagedFlow","reportDecayTimeout","reportMaxTimeout","pooledUpdateAPI","clearTimeout","setTimeout","updateAPI","res","createAPI","deleteAPI","ids","getAllAPI","migrateLocalFlowsToAPI","flows","serialize","localFlows","localID","apiFlow","generate","onCreate","Success","taskid","from","endpoint","taskID","flux","panel","resource","Export_New","TOP_20","getFluxExample","func","fluxParameters","kind","packageName","injectedParameters","parameter","trimLeft","extractor","emptyMessage","renderItem","listHeader","setEventSearchTerm","setSearch","list","filtered","item","Text","generateGradientStyle","background","hex","OrientationToggle","setOrientation","orientation","FlexStart","OpacitySlider","validOpacity","percentLegendOpacity","ColorizeRowsToggle","Medium","toggle","Grey95","Grey65","geomToInterpolation","resolvedGeom","resolveGeom","NOISY_LEGEND_COLUMN_NAMES","NOISY_LEGEND_COLUMNS","filterNoisyColumns","columns","keyData","parseXBounds","parseYBounds","parseFloat","extent","xs","low","Infinity","high","getNumericColumns","columnKeys","columnType","getTimeColumns","getNumberColumns","getStringColumns","getGroupableColumns","invalidGroupColumns","defaultXColumn","preferredColumnKey","validColumnKeys","defaultYColumn","defaultYSeriesColumns","preferredYSeriesColumns","columnKey","defaultYLabelColumns","validYSeriesColumns","isInDomain","clamp","getMainColumnName","selectedFunctions","funcName","CoordinateType","getCoordinateFromS2","s2Column","cellId","column","getS2CellID","fixed","BigInt","precisionTable","getPrecisionTrimmingTableValue","geoCoordinateValue","idToLatLng","toString","lat","lon","lng","getColumnValue","fieldColumn","findIndex","parseCoordinates","coordinate","getGeoCoordinates","useS2CellID","latLonColumns","coordinateColumn","S2","latLonAsTags","Tags","latCoordinate","lonCoordinate","Fields","None","getCoordinateColumn","latColumn","latParsed","lonColumn","lonParsed","latCoordinateParsed","lonCoordinateParsed","convertUserInputValueToNumOrNaN","NaN","Number","convertUserInputToNumOrNaN","queryBuilderFetcher","findKeysQueries","findValuesQueries","findKeysCache","findValuesCache","cachedResult","pendingResult","clearCache","TOOLTIP_PORTAL_ID","onSetChecked","onCopy","elem","Children","only","cloneElement","navigator","clipboard","writeText","execCommand","copy","timerActive","setTimerActive","timerElementClass","diameterPixels","strokeWidth","RESOURCES","mod","RequestContext","requestHandler","responseHandler","prototype","requestHeaders","Headers","contentType","credentials","username","append","middlewareUrl","middlewareQuery","responseContentType","setRequestHandler","setResponseHandler","rc","bind","getScripts","postScript","getScript","scriptID","patchScript","deleteScript","postScriptsInvoke","colorSchemes","selectedColorScheme","onSelectColorScheme","scheme","selectedName","resolvedSchemes","ScrollableMarkdown","autoHide","user","userID","userEmail","setContext","user_id","getQuartzMeThunk","module","exports","DEFAULT_TIME_FORMAT","STRICT_ISO8061_TIME_FORMAT","RFC3339_PATTERN","CACHING_REQUIRED_START_DATE","CACHING_REQUIRED_END_DATE","MILLISECONDS_IN_ONE_DAY","selectedItems","onSelectItem","multiSelect","wrapText","autoHideScrollbars","flex","scrollToSelected","indicator","Indicator","title","labelSchema","Labels","arrayOfLabels","GET_FLUX_DOCS","getFluxPackages","getFluxdocs","onUpdateBucket","limitStatus","asset","REMAP_BUCKET_TYPES","system","sample","onSelect","menuItems","ItemEmpty","Fragment","Divider","BucketSolid","prependZero","number","setCloneName","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","minutes","getUTCMinutes","getUTCSeconds","ClickOutside","handleClickOutside","domNode","findDOMNode","removeEventListener","isFlagEnabled","flagName","equals","_equals","getFlagValue","FeatureFlag","getUserFlags","set","influx","unordered","log","reset","InjectionType","isPipeTransformation","fluxType","EditorContext","editor","setEditor","inject","injectFunction","injectVariable","injectViaLsp","EditorProvider","setEditorOnState","setConnection","cmd","header","initT","triggerSuggest","cbParentOnUpdateText","injectionPosition","lineNumber","col","getPosition","row","getModel","getValue","getCurrentLineText","trimEnd","currentLineText","textAheadOfCursor","textBehindCursor","OnOwnLine","currentRange","getVisibleRanges","endLineNumber","shouldEndInNewLine","cursorInMiddleOfText","shouldStartWithNewLine","calcInjectionPosition","initC","trimRight","edits","monaco","Range","addHeader","executeEdits","hasHeader","textLength","columnOffset","focus","setPosition","trigger","moveCursorAndTriggerSuggest","rawFn","fn","script","importStatement","generateImport","functionRequiresNewLine","SameLine","cbToParent","ed","conn","disallowedImageRenderer","allowedImageRenderer","src","alt","remarkPlugins","MarkdownRenderer","components","img","linkTarget","setBuilderAggregateFunctionType","setBuilderBucketsStatus","setBuilderBuckets","setBuilderBucket","setBuilderTagsStatus","setBuilderTagKeys","setBuilderTagKeysStatus","setBuilderTagValues","setBuilderTagValuesStatus","setBuilderTagKeySelection","setBuilderTagValuesSelection","addTagSelectorSync","removeTagSelectorSync","setFunctions","setAggregateWindow","setAggregateFillValues","setValuesSearchTerm","setKeysSearchTerm","notification","dismissNotification","dismissAllNotifications","CollectorsStep","PluginConfigurationStep","ConfigurationState","DataLoaderType","BundleName","Precision","ConfigFieldType","configure","apiKey","revision","environment","reportErrorThroughHoneyBadger","additionalOptions","additionalContext","errorType","errorCount","parseComponentName","errorInfo","componentStack","___CSS_LOADER_API_IMPORT___","viewsFromCells","cells","cell","viewSchema","Views","arrayOfViews","cellSchema","Cells","arrayOfCells","dashboardSchema","Dashboards","dashboard","addDashboardDefaults","arrayOfDashboards","meta","addDashboardMetaDefaults","updatedAt","webpackContext","req","webpackContextResolve","__webpack_require__","readOnly","refresh","bucketID","initial","note","layout","defaultMessage","getRuleVariantDefaults","endpoints","messageTemplate","channel","parseMode","disableWebPagePreview","CHANGES","activeChange","previousLevel","changeStatusRule","changeType","newValue","initRuleDraft","offset","activeStatus","endpointID","tagRules","statusRules","cid","currentLevel","count","description","draftRuleToPostRule","draftRule","newTagRuleDraft","ruleToDraftRule","l","accessID","getSubscriptionMeasurementValues","dataFormat","jsonMeasurementKey","stringMeasurement","callback","subscriptionID","notebookID","bucketsResp","taskParams","reverse","cron","Authorization","COLOR_TYPE_SCALE","LINE_COLORS_A","LINE_COLORS_B","LINE_COLORS_C","LINE_COLORS_D","LINE_COLORS_E","LINE_COLORS_F","LINE_COLORS_G","LINE_COLORS_SOLID_RED","LINE_COLORS_SOLID_BLUE","LINE_COLORS_SOLID_GREEN","LINE_COLORS_SOLID_YELLOW","LINE_COLORS_SOLID_PURPLE","LINE_COLORS_SOLID_WHITE","LINE_COLORS_BLIND_DARK","LINE_COLORS_BLIND_LIGHT","DEFAULT_LINE_COLORS","LINE_COLOR_SCALES","colorScale","bytesFormatter","significantDigits","trimZeros","defaultButtonElement","defaultErrorNotification","buttonElement","AlertTriangle","defaultWarningNotification","Warning","Group","defaultSuccessNotification","CheckMark_New","defaultDeletionNotification","Trash_New","copyToClipboardSuccess","Cube","copyToClipboardFailed","newVersion","version","Info","CuboUniform","loadLocalSettingsFailed","presentationMode","ExpandB","sessionTimedOut","resultTooLarge","savingNoteFailed","invalidMapType","invalidJSON","missingUserInput","reason","pinnedItemFailure","failureType","Star","pinnedItemSuccess","pinItemType","pinAction","autoRefreshTimeoutSuccess","Clock_New","accountDefaultSettingError","accountDefaultSettingSuccess","accountRenameError","accountRenameSuccess","oldAccountName","newAccountName","inviteFailed","invitationResentFailed","invitationResentSuccessful","inviteSent","invitationWithdrawnFailed","invitationWithdrawnSuccessful","memberAddFailed","memberAddSuccess","memberRemoveFailed","memberRemoveSuccess","memberName","orgCreateFailed","orgCreateSuccess","orgEditFailed","orgEditSuccess","orgRenameFailed","orgName","orgRenameSuccess","removeUserFailed","removeUserSuccessful","userProfileSaveSuccess","userProfileSaveError","deleteAnnotationSuccess","deleteAnnotationFailed","editAnnotationSuccess","editAnnotationFailed","createAnnotationFailed","annotationsUnsupportedOnGraph","authorizationsGetFailed","authorizationCreateSuccess","passwordResetSuccessfully","authorizationCreateFailed","defaultMsg","authorizationUpdateSuccess","authorizationUpdateFailed","authorizationDeleteSuccess","authorizationDeleteFailed","bulkAuthorizationDeleteSuccess","numberOfTokens","bulkAuthorizationDeleteFailed","updateBillingSettingsError","getInvoicesError","getMarketplaceError","getBillingInfoError","updateBillingInfoError","billingContactIncompleteError","updatePaymentMethodError","accountCancellationError","submitError","getBillingSettingsError","zuoraParamsGetFailure","accountSelfDeletionFailed","deleteAccountWarning","styles","flexWrap","getBucketsFailed","getBucketFailed","bucketRenameSuccess","bucketRenameFailed","addBucketLabelFailed","removeBucketLabelFailed","bucketDeleteFailed","bucketDeleteSuccess","bucketCreateSuccess","bucketCreateFailed","bucketUpdateSuccess","bucketUpdateFailed","measurementSchemaAdditionSuccessful","schemaName","measurementSchemaUpdateSuccessful","measurementName","measurementSchemaAdditionFailed","errorMsg","measurementSchemaUpdateFailed","dashboardGetFailed","DashH","dashboardsGetFailed","dashboardUpdateFailed","dashboardDeleted","dashboardCreateFailed","dashboardCreateSuccess","dashboardDeleteFailed","cellAddFailed","cellCloneSuccess","destinationDashboardID","operationType","cellName","cellUpdateFailed","cellDeleted","addDashboardLabelFailed","removedDashboardLabelFailed","scraperDeleteSuccess","scraperName","scraperDeleteFailed","scraperCreateSuccess","scraperCreateFailed","scraperUpdateSuccess","scraperUpdateFailed","telegrafGetFailed","telegrafCreateFailed","telegrafUpdateFailed","telegrafName","cloneTelegrafSuccess","addTelegrafLabelFailed","removeTelegrafLabelFailed","telegrafDeleteFailed","getTelegrafConfigFailed","TelegrafDashboardCreated","configs","TelegrafDashboardFailed","readLimitReached","rateLimitReached","secs","retryText","writeLimitReached","Secondary","resourceLimitReached","resourceName","queryCancelRequest","notebookRunFail","projectName","panelCopyLinkSuccess","panelCopyLinkFail","notebookCreateFail","notebookUpdateFail","notebookDeleteFail","notebookDeleteSuccess","csvUploaderErrorNotification","csvUploadCancelled","publishNotebookSuccessful","publishNotebookFailed","SetupSuccess","SetupError","SigninError","checkStatusLoading","QuickstartScraperCreationSuccess","QuickstartScraperCreationError","QuickstartDashboardCreationSuccess","QuickstartDashboardCreationError","TelegrafConfigCreationSuccess","TelegrafConfigCreationError","TokenCreationError","getOrgsError","getOrgError","getLimitsError","updateLimitsError","updateLimitsSuccess","getAccountsError","getAccountError","convertAccountError","deleteAccountError","getSecretsFailed","upsertSecretFailed","deleteSecretsFailed","subscriptionCreateFail","subscriptionUpdateFail","subscriptionStatusUpdateFail","subscriptionsGetFail","subscriptionStatusesGetFail","subscriptionsDeleteFail","addTaskLabelFailed","removeTaskLabelFailed","getLabelsFailed","createLabelFailed","updateLabelFailed","deleteLabelFailed","taskNotCreated","additionalMessage","taskCreatedSuccess","taskNotFound","tasksFetchFailed","taskDeleteFailed","taskDeleteSuccess","taskCloneSuccess","taskName","taskCloneFailed","taskUpdateFailed","taskUpdateSuccess","taskImportFailed","taskImportSuccess","taskRunSuccess","taskRunFailed","taskGetFailed","taskRetrySuccess","taskRetryFailed","importDashboardSucceeded","importDashboardFailed","communityTemplateInstallSucceeded","templateName","communityTemplateInstallFailed","communityTemplateDeleteSucceeded","communityTemplateDeleteFailed","communityTemplateFetchStackFailed","communityTemplateUnsupportedFormatError","communityTemplateRenameFailed","invalidTimeRangeValueInURLQuery","invalidVariableNameValuePairInURLQuery","getVariablesFailed","getVariableFailed","getVariableFailedWithMessage","createVariableFailed","createVariableSuccess","deleteVariableFailed","deleteVariableSuccess","updateVariableFailed","updateVariableSuccess","moveVariableFailed","addVariableLabelFailed","removeVariableLabelFailed","getMapToken","___CSS_LOADER_AT_RULE_IMPORT_0___","___CSS_LOADER_GET_URL_IMPORT___","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_IMPORT_1___","___CSS_LOADER_URL_IMPORT_2___","___CSS_LOADER_URL_IMPORT_3___","___CSS_LOADER_URL_IMPORT_4___","___CSS_LOADER_URL_IMPORT_5___","___CSS_LOADER_URL_IMPORT_6___","___CSS_LOADER_URL_IMPORT_7___","___CSS_LOADER_URL_IMPORT_8___","___CSS_LOADER_URL_IMPORT_9___","___CSS_LOADER_URL_IMPORT_10___","___CSS_LOADER_URL_IMPORT_11___","___CSS_LOADER_URL_IMPORT_12___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","___CSS_LOADER_URL_REPLACEMENT_5___","___CSS_LOADER_URL_REPLACEMENT_6___","___CSS_LOADER_URL_REPLACEMENT_7___","___CSS_LOADER_URL_REPLACEMENT_8___","___CSS_LOADER_URL_REPLACEMENT_9___","___CSS_LOADER_URL_REPLACEMENT_10___","___CSS_LOADER_URL_REPLACEMENT_11___","___CSS_LOADER_URL_REPLACEMENT_12___","BrokerAuthTypes","PrecisionTypes","Steps","SET_LABELS","SET_LABEL","REMOVE_LABEL","SET_LABEL_ON_RESOURCE","setLabels","setLabel","removeLabel","setLabelOnResource","resourceID","runQuery","processResponse","processSuccessResponse","processRateLimitResponse","processErrorResponse","DEFAULT_SCHEMA","measurement","fields","tagValues","composition","synced","diverged","DEFAULT_EDITOR_TEXT","hasChanged","horizontal","vertical","selection","setHasChanged","setHorizontal","setVertical","setRange","setQuery","setResource","setSelection","clearSchemaSelection","save","PersistanceContext","PersistanceProvider","handleSetResource","setSchemaSelection","nextState","persist","UNTITLED_GRAPH","DEFAULT_DASHBOARD_SORT_OPTIONS","sortDirection","Ascending","sortType","sortKey","DashboardTemplate","DEFAULT_CELL_NAME","DEFAULT_DASHBOARD_NAME","DEFAULT_COLLECTOR_NAME","DEFAULT_TASK_NAME","DEFAULT_SCRAPER_NAME","DEFAULT_TOKEN_DESCRIPTION","DASHBOARD_NAME_MAX_LENGTH","CELL_NAME_MAX_LENGTH","CEOTabs","UPDATED_AT_TIME_FORMAT","getNotebooks","postNotebook","getNotebooksVersion","getNotebooksVersions","postNotebooksVersion","getNotebook","patchNotebook","deleteNotebook","getNotebooksShare","postNotebooksShare","deleteNotebooksShare","defaultView","defaultViewQuery","defaultBuilderConfig","legendProps","tickProps","defaultLineViewProperties","showNoteWhenEmpty","defaultSingleStatViewProperties","isEnforced","digits","NEW_VIEW_CREATORS","xy","band","histogram","heatmap","gauge","verticalTimeAxis","sortBy","fixFirstColumn","showAll","markdown","scatter","mosaic","geo","center","zoom","allowPanAndZoom","detectCoordinateFields","mapStyle","layers","colorDimension","colorField","isClustered","tooltipColumns","checkID","deadman","custom","createView","creator","isConfigValid","isDraftQueryAlertable","fieldSelection","fieldValues","oneQuery","builderMode","singleAggregateFunc","singleField","isCheckSaveable","checkType","thresholds","buildQuery","buildQueryFromConfig","tagsFunctionCalls","convertTagsToFluxFunctionString","fnCall","fnSpec","formattedPeriod","formatPeriod","formatFunctionCall","tagToFlux","quotedValues","ConfirmationState","confirmationState","hasQueryBeenEdited","NotRequired","Required","getBrokerSubs","postBrokerSub","getBrokerSub","putBrokerSub","deleteBrokerSub","getBrokerSubsStatus","putBrokerSubsStatus","getBrokerSubsStatuses","LIMIT","BUCKET_LIMIT","RULE_LIMIT","DASHBOARD_LIMIT","TASK_LIMIT","getStatus","getAll","getAllBuckets","getAllTelegrafs","Telegrafs","getAllSecrets","Secrets","getToken","getByID","getLabels","labelIDs","getAllTokensResources","getAllOrgs","errorOrgsState","handleStartEditing","isEditing","handleStopEditing","workingDescription","onUpdate","handleKeyDown","handleInputFocus","currentTarget","select","previewClassName","Pencil","maxLength","spellCheck","onKeyDown","untitled","handleClickDelete","onDelete","fieldName","emptyState","columnCount","Cell","alignment","Right","onConfirm","returnValue","popoverColor","Danger","popoverAppearance","confirmationLabel","confirmationButtonColor","confirmationButtonText","confirmText","onDeleteTag","MultiInputType","inputType","editingText","URI","debouncedValidate","newItem","inputRef","onAddRow","shouldAddToList","handleDeleteRow","onDeleteRow","handleValidateURI","validateURI","createRef","helpText","onEditRow","Eight","offsetXS","One","autocomplete","Off","ref","Two","minHeight","Ten","rel","maxWidth","footer","onDismiss","Container","Footer","handleSetCurrentStep","currentStepIndex","isAfterCurrentUnskippableStep","isStepSkippable","isAfterNextUnskippableStep","nextNonSkippableStep","WizardProgress","stepSkippable","stepStatuses","isSkippable","Complete","getStepClass","hideFirstStep","stepTitles","stepTestIds","lastIndex","stepStatus","currentStep","stepEle","connectorStatus","Some","Full","connectorEle","onCollapseMenu","handleExpandMenu","onBoostZIndex","isExpanded","handleCollapseMenu","toggleClassName","menuClassName","listClassName","Square","ComponentColor","ComponentSize","ComponentStatus","DropdownMenuColors","DropdownMenuPosition","ButtonShape","ButtonType","Greys","IconFont","Columns","Alignment","Sort","Stack","NavMenuType","handleBoostZIndex","boostZIndex","align","Left","EMPTY_NOTEBOOK","_flow","clone","_id","useLocalStorageState","FlowListContext","createdAt","createdBy","out","hydrate","isDirty","pipe","FlowListProvider","setFlows","currentID","setCurrentID","migrate","prevFlows","_flows","getActiveTimeMachine","getActiveCellID","getActiveGraphType","getIsInCheckOverlay","getActiveQuery","tm","getWindowPeriodFromTimeRange","getVisTableMemoized","getVisTable","fluxGroupKeyUnion","resultColumnNames","getStringColumnsMemoized","getGroupableColumnsMemoized","getXColumnSelection","preferredXColumnKey","getYColumnSelection","preferredYColumnKey","getYSeriesColumns","getGroupableColumnSelection","validColumns","preference","getFillColumnsSelectionMemoized","getSymbolColumnsSelectionMemoized","getAnnotations","getFillColumnsSelection","validFillColumns","getSymbolColumnsSelection","validSymbolColumns","getStartTime","valueOf","getEndTime","getActiveTimeRange","getMainColumn","getSaveableView","saveableView","getWindowPeriodFromQueryBuilder","viewId","PopupContext","launch","closeFn","PopupDrawer","PopupProvider","setElement","setData","_element","_data","ActionTypes","deleteTimeRange","DeleteTimeRange","setDashboardTimeRange","SetDashboardTimeRange","retainRangesDashTimeV1","dashboardIDs","RetainRangesDashboardTimeV1","updateQueryParams","updatedQueryParams","updateQueryVars","varsObj","updateTimeRangeFromQueryParams","ranges","validatedTimeRangeFromQuery","validatedTimeRange","COLOR_TYPE_MIN","DEFAULT_VALUE_MIN","COLOR_TYPE_MAX","DEFAULT_VALUE_MAX","COLOR_TYPE_THRESHOLD","THRESHOLD_TYPE_TEXT","THRESHOLD_TYPE_BG","BASE_THRESHOLD_ID","THRESHOLD_COLORS","DEFAULT_GAUGE_COLORS","DEFAULT_THRESHOLDS_GEO_COLORS","DEFAULT_THRESHOLDS_LIST_COLORS","DEFAULT_THRESHOLDS_TABLE_COLORS","imports","format_from_js_file","createDashboardFromTemplate","content","attributes","createdDashboard","labelMap","createLabelsFromTemplate","addDashboardLabelsFromTemplate","createCellsFromTemplate","createVariablesFromTemplate","getResp","createResourceFromPkgerTemplate","dryRun","contents","labelRelationships","resolved","included","labeledResources","includedLabels","existingLabels","promisedLabels","lab","allLabels","createdLabel","relationships","cellRelationships","cellsToCreate","pendingCells","cellResponses","responses","createViewsFromTemplate","pendingViews","viewRelationship","variablesIncluded","normVariables","pendingVariables","resolvedVariables","normCreated","normVar","allVars","addLabelsToVars","includedVar","applyTemplates","reviewTemplate","templateUrl","remotes","installTemplate","resourcesToSkip","envRefs","actions","resourceTemplateName","fetchStacks","stacks","deleteStack","stackId","stack_id","updateStackName","stackID","templateURLs","additionalResources","fetchReadMe","directory","statusText","telegrafSchema","arrayOfTelegrafs","getMe","getQuartzMe","getQuartzMeStatus","shouldGetCredit250Experience","accountCreatedAtEpoch","shouldShowUpgradeButton","TEST_NOTIFICATION","ENDPOINT_DEFINITIONS","ENDPOINT_ORDER","definition","preserveAspectRatio","points","level","onDrag","onMouseUp","dragTargetProps","onMouseDown","mouseDownEvent","stopPropagation","pageX","pageY","onMouseMove","mouseMoveEvent","mouseUpEvent","useDragBehavior","levelClass","top","yScale","within","onChangeMinPos","onChangeMaxPos","minY","maxY","onChangePos","onSetThresholds","originRef","nextZoomThreshold","zoomThreshold","setZoomThreshold","debouncedZoomIn","maxValue","minValue","handleDrag","yRelative","getBoundingClientRect","yValue","invert","nextThreshold","roundedThresholds","nt","triggerRect","el","rect","caretClassName","innerHeight","setAttribute","caretTop","querySelector","events","calculateLevelStyle","colorize","toUpperCase","colName","checkName","xScale","xFormatter","tooltipVisible","setTooltipVisible","ceil","levels","eventLevels","findMaxLevel","markerClass","formattedEvents","onMouseOver","onMouseOut","filterEvents","eventsArray","isOkVisible","isInfoVisible","isWarnVisible","isCritVisible","isUnknownVisible","setOkVisibility","setInfoVisibility","setWarnVisibility","setCritVisibility","setUnknownVisibility","filteredEventsArray","setFilteredEventsArray","iconGlyph","EyeOpen","EyeClosed","eventVisToggle","X_COLUMN","Y_COLUMN","updateThresholds","onSetYDomain","onResetYDomain","EmptyGraphMessage","groupKey","getFormatter","yFormatter","legendColumns","thresholdValues","yTicks","colorHexes","currentTheme","valueFormatters","interpolation","measurements","setSearchTerm","SchemaContext","SchemaProvider","memo","getPanelQueries","setSchema","setLoading","scope","schemaForBucket","no","len","_measurement","_field","colLen","parsedResultToSchema","normalized","facc","fcurr","tacc","normalizeSchema","selectedMeasurement","updateMeasurementSelection","updated","gradient","GundamPilot","selectedField","updateFieldSelection","selectedTags","selectEventText","deselectEventText","handleSublistMultiSelect","tagName","tagValue","updatedTags","handleSubListItemClick","metaKey","ctrlKey","updatedValue","_tags","byTag","tcurr","noResults","Grey5","constructFilters","tagNames","mappedTags","filters","_filter","handleDeleteFilter","currentFilters","handleSetSearch","Context","resizes","BucketSelector","family","priority","readOnlyComponent","aggregateFunction","getDefaultCard","cards","selectMeasurement","cancelKey","_idx","cancelValue","_card","loadKeys","_search","loadValues","QueryBuilderContext","toBuilderConfig","card","fromBuilderConfig","loadingKeys","loadingValues","QueryBuilderProvider","setCancelKey","setCancelValue","cardMeta","setCardMeta","tagSelections","tagString","searchString","previousTagSelections","previousTagString","_source","queryText","currentCards","Plus_New","MiniFileDnd","allowedExtensions","handleFileUpload","dropAreaActive","setDropAreaActive","inputEl","inputElement","accept","file","FileReader","readAsText","onload","displayText","dropZoneClasses","displayAreaClasses","onDrop","dataTransfer","onDragOver","ev","onDragLeave","ALLOWED_TYPES","ALLOWED_EXTENSIONS","DATA_TYPE_STRINGS","validSchemaName","_name","fileErrorMessage","setFileErrorMessage","valid","_schema","nameErrorMessage","dataType","wordBreak","DURATION_OPTIONS","validateName","_input","DEFAULT_RETENTION_RULE","onCancel","setName","retention","setRetention","newSchemas","setNewSchemas","schemaType","setSchemaType","validForm","retentionType","setRetentionType","schemaPanels","schemas","ValidationElement","validationFunc","DurationSelector","selectedDuration","onSelectDuration","durationSeconds","AccordionHeader","AccordionBodyItem","Tertiary","createBucket","triggerRef","Above","showEvent","Click","hideEvent","onHide","addBucket","BuilderCard","Empty","_selectBucket","usedSearch","filteredBuckets","toLocaleLowerCase","sections","renderListItem","isSelected","debounce_array","debouncer","Card","keySearches","setKeySearches","valueSearches","setValueSearches","allItems","_remove","_update","fnType","keySearch","valueSearch","isCompliant","valueSelect","finally","emptyText","_values","WaitingText","SelectorList","placeholderValue","DropdownHeader","selectedOption","SearchableDropdown","searchPlaceholder","toComponentStatus","onChangeSearchTerm","buttonTestID","menuTestID","TagSelectorCount","noScrollY","FunnelSolid","Link","ToolbarExpression","expression","onClickFunction","updateSearch","schemaExpressions","columnsToInclude","expComponent","order","categoriesCompare","charAt","exp","Expression","minWidth","textAlign","Child","grow","setThresholdType","updatedThreshold","Deadman","deadmanCheckValue","deadmanStopValue","setColumn","funcDropdown","columnDropdown","updateDeadmanCheckValue","updateDeadmanStopValue","thresholdEntry","DurationInput","updateMin","updateMax","changeEvent","updateValue","handleRemoveThreshold","fontWeight","fontSize","generateDeadmanTask","conditions","condition","generateImports","newQuery","generateQuery","endpointData","newAST","varString","varHeader","paramString","taskHeader","generateThresholdTask","generateTask","ExportTaskButton","NotificationMonacoEditor","showId","setStatus","editorInstance","setEditorInstance","intervalError","offsetError","secrets","loadingText","hasTaskOption","numericColumns","updateMessage","warningMessage","avail","updateEndpoint","which","shrink","paddingBottom","Stretch","Grey15","FlexEnd","generateTestImports","generateTestQuery","createSecret","CreateSecretForm","onChangeText","Bell","visual","setSize","useState","fgColor","Fire","bgColor","imageSettings","excavate","errorThresholds","fieldTypes","fieldType","THRESHOLD_TYPES","WrappedViewOptions","updateProperties","updateType","dataExists","toggler","CogSolid_New","alignSelf","marginRight","canvasOption","useCORS","getValueColumn","disable","pipeID","canvas","toDataURL","downloadAsImage","jsPDF","doc","addImage","downloadAsPDF","controls","BarChart_New","fieldIndices","triggeredErrorThresholdMessage","realValues","thresholdValue","stretchToFitHeight","mapServiceError","setMapServiceError","mapToken","setMapToken","coordinateError","setCoordinateError","geoCoordinates","setGeoCoordinates","layer","tileServerConfiguration","tileServerUrl","coordinates","bingKey","layersOpts","zoomOpt","showAxes","findTags","latLon","getColumnName","S2ColumnOptions","handleS2Select","LatLonColumnOptions","tagsAndFields","findFields","handleLatSelect","latLonColumnOptions","handleLonSelect","tagAndField","MapType","marginTop","marginBottom","ThresholdsSettings","columnSource","beginDrag","columnTarget","hover","monitor","dragIndex","getItem","hoverIndex","hoverBoundingRect","hoverMiddleY","bottom","hoverClientY","getClientOffset","onMoveColumn","handleColumnRename","onUpdateColumn","handleToggleVisible","connectDragPreview","connectDropTarget","columnClassName","labelClassName","dragHandle","visibilityToggle","connectDragSource","isDragging","dragColumnType","dragColumnSource","dragHandler","dropColumnType","dropColumnTarget","dropHandler","connect","dropTarget","DropTarget","dragSource","dragPreview","DragSource","move","fromIndex","toIndex","targetValue","valuesRemoved","setDigits","handleChangeMode","Auto","updateTableOptions","updateThreshold","shouldSeeColumn","updateColumn","fieldOption","moveColumn","activeSetting","draggableColumns","widthMD","Six","Custom","onChangeMode","inputComponent","Box","DndProvider","backend","parsedChunk","tables","currVal","currTable","columnHeaders","tableData","rowType","originalType","columnData","rowData","groupSet","isJsonObject","jsonString","dataTypes","defaultRow","groupHeaders","j","getOriginalColumnType","shift","parseFromFluxResults","fluxResponse","tableTheme","adaptiveZoomTooltipStyle","adaptiveZoomTooltip","SafeBlankLink","AdaptiveZoomToggle","adaptiveZoomHide","diameter","tooltipContents","tooltipStyle","updateAxis","widthLG","Four","getGeomLabel","ColorSchemeDropdown","fillColumnMap","newProperties","colorMapping","Checkbox","AxisTicksGenerator","axisName","AutoDomainInput","onSetDomain","HoverLegend","StaticLegend","resultState","setResultState","preZoomResult","setPreZoomResult","requeryStatus","setRequeryStatus","axisTicksOptions","useAxisTicksGenerator","tooltipOpacity","useLegendOpacity","tooltipColorize","tooltipHide","tooltipOrientationThreshold","useStaticLegend","isVeoOpen","inAnnotationMode","storedXDomain","storedYDomain","isValidView","memoizedYColumnData","lineData","fillColumn","Y","zoomQuery","queryTextFromProperties","useZoomQuery","onSetXDomain","onResetXDomain","parsedResult","setResult","storedDomain","memoizedGetColorMappingObjects","colorMappingForGiraffe","colorMappingForIDPE","needsToSaveToIDPE","shadeBelowOpacity","REMOVE_COLUMN","ColumnSelectionError","defaultColumn","columnName","getColumnChoices","getDropdownColumnStatus","mainColumnName","lineWidth","lineOpacity","shadeOpacity","upperColumnName","lowerColumnName","x1","y1","x2","y2","PI","Grey45","Grey85","Grey55","Grey25","Grey35","GAUGE_ARC_LENGTH_DEFAULT","gaugeColors","gaugeSize","gaugeTheme","valuePositionXOffset","valuePositionYOffset","cx","cy","isValidXDomain","TimeDomainAutoToggle","setDomain","isActive","setIsActive","calculatedXDomain","availableGroupColumns","groupDropdownStatus","selectedOptions","columnExists","updatedColumns","fc","HexColorSchemeDropdown","widthSM","timerange","symbol","interactionHandlers","singleClick","latestValue","textColor","lastValue","cellType","textOpacity","svgTextStyle","dominantBaseline","textAnchor","letterSpacing","svgTextAttributes","MarkdownMonacoEditor","panelContents","onChangeScript","autogrow","markdownClassname","cbOnInject","handleCreateSecret","secret","FilterList","FluxMonacoEditor","Query","editorContext","updateText","_queries","injectIntoEditor","launcher","Flask","wrapLines","onSubmitScript","comments","finish","timeTag","_start","_finish","diff","RunLogs","runID","logs","setLogs","_logs","autoSizeHeight","HeaderCell","Run","run","timer","runOverride","setRunOverride","_run","scheduledFor","startedAt","finishedAt","History","runs","setRuns","_runs","runsView","_status","tasks","validCron","isNumber","str","endsWith","splits","sides","small","big","_str","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","sun","mon","tue","wed","thu","fri","sat","mapDay","latestTask","taskText","hasChanges","persistentControls","basis","beforeRemove","removeFlowTasks","frameBorder","allow","setIsEditing","toggleEdit","showEditing","HEATMAP_COLOR_SCHEMES","binInputStatus","setBinInputStatus","binInput","setBinInput","ySeriesColumn","stringColumns","xDataColumn","updateYLabelColumns","currentYLabelColumns","updatedYLabelColumns","currentYLabelColumn","updatedYSeriesColumns","setColors","_colors","statLayer","mappings","msg","Layers","autoComplete","autoCorrect","mods","renamed","dropped","splitQuery","queryString","AVAILABLE_FUNCTIONS","selectFn","fns","found","fnIdx","buttonColor","buttonIcon","_period","REGIONS","group","flag","setError","updater","hashed","regionLabel","Password","SampleCSVs","airSensor","noaa","usgs","csvHash","setCSVHash","csvType","columnNames","columnUrls","sampleName","handleSelectFromDropdown","QueryStat","queryStart","processTime","setProcessTime","tableNum","tableColumn","lastTableValue","timePassed","queryStat","dupped","newLen","oldCols","newCols","caveat","expressions","_ast","call","ErrorHandling","componentDidCatch","forceUpdate","ErrorHandlingWith","startError","stopError","ToBucket","output","allowFullScreen","SecretsDropdown","accessKey","authAlgo","credScope","signedHeaders","calcSignature","updateAuth","updateUsername","updatePassword","updateToken","prefixSecrets","_headers","subject","encodeURIComponent","fromEmail","apiSecret","defaultEndpoint","SET_TASKS","EDIT_TASK","SET_TASK_OPTION","SET_ALL_TASK_OPTIONS","CLEAR_TASK","CLEAR_CURRENT_TASK","SET_NEW_SCRIPT","SET_CURRENT_SCRIPT","SET_CURRENT_TASK","SET_SEARCH_TERM","SET_SHOW_INACTIVE","SET_RUNS","SET_LOGS","REMOVE_TASK","ADD_TASK","SET_CURRENT_TASKS_PAGE","setTasks","addTask","editTask","removeTask","setCurrentTask","clearCurrentTask","setTaskOption","setAllTaskOptions","clearTask","setNewScript","setCurrentScript","setShowInactive","runStatus","TaskPage","setCurrentTasksPage","page","tasksPage","suggestedColors","inputColorPreviewOn","customizedDropdownItem","severities","updateSeverity","severity","Scripts","language","NetworkErrorTypes","UnauthorizedError","NotFoundError","UnprocessableEntityError","ServerError","GenericError","fetchIdentity","fetchQuartzIdentity","fetchQuartzMe","fetchLegacyIdentity","fetchAccountDetails","accountId","accountIdString","updateDefaultQuartzAccount","fetchOrgDetails","fetchOrgsByAccountID","accountNum","updateDefaultOrgByAccountID","getDefaultAccountDefaultOrg","defaultAccount","isDefault","quartzOrg","REMOVE_VIEW","RESET_VIEWS","SET_VIEW","SET_VIEWS","SET_VIEWS_AND_CELLS","removeView","resetViews","setViews","setView","setViewsAndCells","cellsArray","viewsArray","SET_TELEGRAFS","ADD_TELEGRAF","EDIT_TELEGRAF","REMOVE_TELEGRAF","SET_CURRENT_CONFIG","setTelegrafs","addTelegraf","editTelegraf","removeTelegraf","TIME_INVALIDATION","asSimplyKeyValueVariables","vari","hashCode","rawText","hash","charCodeAt","queryCache","cleanExpiredQueries","isCustomTime","dateSet","resetCacheByID","getFromCache","hashedVariables","initializeCacheByID","mutex","resetCache","setCacheByID","cacheResults","startWatchDog","resetQueryCache","resetQueryCacheByQuery","calculateHashedVariables","simplifiedVariables","stringifiedVars","getCachedResultsOrRunQuery","windowVars","hasWindowVars","getCachedResultsThunk","buildUsedVarsOption","filteredAssignmentVars","buildVarsOption","assignmentToProperty","app","persisted","navbarMode","navBarState","fluxQueryBuilder","getVersionInfo","versionInfo","getPresentationMode","ephemeral","inPresentationMode","getFlowsCTA","flowsCTA","explorer","alerts","getAllFluxFunctions","fluxDocs","getSubscriptionsCertificateInterest","subscriptionsCertificateInterest","isValidDatepickerFormat","getFormat","DatePicker","inCurrentMonth","inputFormat","dayClassName","handleSelectDate","onSelectDate","setMinutes","getMinutes","handleChangeInput","inputDate","fromISO","fromFormat","isInputValueInvalid","onInvalidInput","dateTime","maxDate","minDate","inputErrorMessage","inline","startOpen","dateFormat","showTimeSelect","shouldCloseOnSelect","disabledKeyboardNavigation","calendarClassName","timeIntervals","fixedHeight","showOverlay","overlayID","overlayParams","onClose","ShowOverlay","dismissOverlay","DismissOverlay","setOverlayParams","SetOverlayParams","xmlns","xmlSpace","QUICKSTART_SCRAPER_TARGET_URL","pluginsByBundle","System","Docker","Kubernetes","Nginx","Redis","telegrafPluginsInfo","cpu","templateID","disk","diskio","docker","isRequired","StringArray","kernel","kubernetes","Uri","logparser","mem","net","net_response","nginx","urls","UriArray","procstat","exe","prometheus","redis","servers","syslog","server","swap","tail","BUNDLE_LOGOS","PLUGIN_BUNDLE_OPTIONS","SET_AUTH","ADD_AUTH","EDIT_AUTH","REMOVE_AUTH","SET_CURRENT_AUTH","SET_ALL_RESOURCES","setAuthorizations","addAuthorization","removeAuthorization","setCurrentAuthorization","setAllResources","createAuthorization","authorization","getConnection","INFLUX_LABEL_PREFIX","HEX_CODE_CHAR_LENGTH","EMPTY_LABEL","PRESET_LABEL_COLORS","colorHex","Preset","INPUT_ERROR_COLOR","LABEL_NAME_MAX_LENGTH","getWindowVarsFromVariables","getWindowPeriodFromVariables","calcWindowPeriodForDuration","substitutedAST","getWindowPeriodVariableFromVariables","total","getVariableForZoomRequery","timeRangeType","stopTime","normalizeWindowPeriodForZoomRequery","counter","startIndex","endIndex","isSorted","prevValue","normalizeWindowPeriodVariableForZoomRequery","variableAssignment","assignedWindowPeriod","MeasurementSchemaCreateRequest","BucketContext","BucketProvider","omitSampleData","bucketCache","setBucketCache","lastFetch","updateCache","fetchBuckets","bucks","outBuckets","isAnnotationsModeEnabled","enableAnnotationsMode","CheckContext","updateStatuses","AlertProvider","alertBuilder","setStatuses","check","Checks","ADD_DASHBOARD_LABEL","DELETE_DASHBOARD_FAILED","EDIT_DASHBOARD","REMOVE_DASHBOARD","REMOVE_DASHBOARD_LABEL","SET_DASHBOARD","SET_DASHBOARDS","SET_DASHBOARD_SORT","SET_DASHBOARDS_SEARCH_TERM","editDashboard","setDashboards","setDashboardSort","sortOptions","removeDashboard","removeDashboardLabel","selectQuartzIdentity","selectQuartzIdentityStatus","selectQuartzOrgs","isSearchActive","setIsSearchActive","filteredOptions","FORMAT_OPTIONS","resolveTimeFormat","makeCreateMethod","userModifiedAnnotation","summary","endTime","actualEndTime","stream","makeAnnotationClickListener","createAnnotation","plotInteraction","clampedValueX","valueX","sortAnnotations","anno1","anno2","makeAnnotationLayer","annotationsAreVisible","annotationsToRender","annotation","Honeydew","handleAnnotationClick","annotationToEdit","clickedAnnotation","makeAnnotationClickHandler","startValue","stopValue","dimension","pin","addAnnotationLayer","singleShiftClick","onXBrush","makeAnnotationRangeListener","annotationLayer","handleUnsupportedGraphType","formatOptions","getValidRange","useVisXDomainSettings","initialDomain","zoomRequery","isValidStoredDomainValue","isFinite","getRemainingRange","useVisYDomainSettings","isNotEqual","firstValue","secondValue","useZoomRequeryXDomainSettings","selectedTimeRange","setSelectedTimeRange","preZoomDomain","setPreZoomDomain","setWindowPeriod","updatedWindowPeriod","zoomQueryWindowVariable","setVisXDomain","updatedDomain","useZoomRequeryYDomainSettings","setVisYDomain","PipeContext","PipeProvider","updateData","statusValues","stat","scrollIntoView","compareIDPEandLocalMappings","map1","map2","isMappingReusable","additions","isEmpty","deletions","getColorMappingObjects","columnGroupMap","seriesToColorHexMap","generateSeriesToColorHex","graphLine","seriesID","getSeriesId","newColorMappingForGiraffe","minus","seriesToColorHex","colorIndex","colorsHexArray","fillScale","fromFluxResult","formatAnnotationQueryString","requestType","getAnnotationParams","streamParam","stickers","writeAnnotation","postAnnotation","AnnotationListFilter","retrievedAnnotation","updateAnnotation","newAnnotation","annotationID","putAnnotation","annotationToDelete","deleteAnnotation","fetchAndSetAnnotations","writeThenFetchAndSetAnnotations","editAnnotation","updatedAnnotation","setToolTipPopup","setHoverdFunction","headline","arg","param","paramClass","sortFuncs","hoveredFunctions","eventSearchTerm","termRecorded","setTermRecorded","tooltipPopup","setTooltipPopup","hoveredFunction","fluxFunctions","function","handleSelectItem","filteredpaths","filtereditems","ToolTipContent","argComponent","filteredFunctions","fnComponent","setActiveTimeMachine","setActiveTab","toggleVisOptions","setTimeMachineTimeRange","setTimeRange","setAutoRefresh","setType","setActiveQueryText","setIsViewingRawData","editActiveQueryWithBuilderSync","editActiveQueryWithBuilder","resetActiveQuerySwitchToBuilder","editActiveQueryAsFlux","setActiveQueryIndex","setActiveQueryIndexSync","addQuery","removeQuery","removeQuerySync","toggleQuery","toggleQuerySync","updateActiveQueryName","setStaticLegend","loadNewVEO","enablePresentationMode","EnablePresentationMode","disablePresentationMode","DisablePresentationMode","setTheme","setFluxQueryBuilder","SetFluxQueryBuilder","setNavBarState","SetNavBarState","setTimeZone","SetTimeZone","setVersionInfo","SetVersionInfo","setFlowsCTA","SetFlowsCTA","setSubscriptionsCertificateInterest","SetSubscriptionsCertificateInterest","SET_IS_AUTO_FUNCTION","setIsAutoFunction","bool","isAutoFunction","getConfigFields","pluginName","updateConfigFields","plugin","assign","createNewPlugin","pluginType","isPluginUniqueToBundle","telegrafPlugin","bundle","bundles","isPluginInBundle","SET_VARIABLES","SET_VARIABLE","REMOVE_VARIABLE","MOVE_VARIABLE","SELECT_VARIABLE_VALUE","setVariables","setVariable","removeVariable","newVariableOrder","CLEAR_VARIABLE_EDITOR","CHANGE_VARIABLE_EDITOR_TYPE","UPDATE_VARIABLE_EDITOR_NAME","UPDATE_VARIABLE_EDITOR_QUERY","UPDATE_VARIABLE_EDITOR_MAP","UPDATE_VARIABLE_EDITOR_CONSTANT","clearEditor","editorType","updateName","updateQuery","updateMap","updateConstant","SET_BUCKETS","ADD_BUCKET","EDIT_BUCKET","REMOVE_BUCKET","setBuckets","editBucket","removeBucket","validateLabelUniqueness","labelNames","labelName","validateHexCode","isValidLength","beginsWithHash","substring","containsValidCharacters","addLabelDefaults","timesNeedConverting","newTimeRange","formattedTimeStr","addDurationToDate","setDate","setHours","getHours","isISODate","dateString","convertStringToEpoch","convertedDate","taskSchema","Tasks","arrayOfTasks","Lock","HoverLegendToggle","handlers","handleSetHoverLegendHide","showLegend","handleChooseHoverLegend","metricValue","useCheckYDomain","dataDomain","extrema","useCheckYDomainWithState","LOAD_MORE_LIMIT_INITIAL","LOAD_MORE_LIMIT","IMPORT_REGEXP","IMPORT_STRINGS","IMPORT_INFLUX_SCHEMA","SAMPLE_DATA_SET","FROM_BUCKET","SEARCH_STRING","useSessionStorage","keyName","defaultValue","storedValue","setStoredValue","sessionStorage","setItem","detail","dispatchEvent","CustomEvent","oldValue","getViewsForDashboard","cellIDs","getTimeFormatForView","viewID","getUiproxyMapToken","postUiproxySfdcSupport","UNPROCESSED_PANEL_TEXT","PIPE_DEFINITIONS","NOTEBOOKS_DOCUMENTATION_LINK","didCopy","setDidCopy","ToTheRight","Hover","distanceFromTrigger","CopyToClipboard","emptyGraphCopy","ErrorFormat","Tooltip","EmptyGraphErrorTooltip","reportPoints","batch","point","asRudderOptions","campaign","reportingTags","reportingPoints","campaignInfo","updateReportingContext","inst","getInstance","_isInitialized","setUserId","setUserProperties","pooledEvent","timestamp","gaEvent","normalizeEventName","logEvent","useLoadTimeReporting","loadStartTime","updateCampaignInfo","allowedUtmKeys","queryParams","info","substr","secretsSchema","arrayOfSecrets","getSecrets","upsertSecret","newSecret","strippedSecret","deleteSecret","secretID","pluralizer","SET_CELL","SET_CELLS","REMOVE_CELL","setCell","removeCell","setCells","ADD_TEMPLATE_SUMMARY","SET_STAGED_TEMPLATE","SET_STAGED_TEMPLATE_URL","TOGGLE_TEMPLATE_RESOURCE_INSTALL","UPDATE_TEMPLATE_ENV_REF","SET_STACKS","SET_TEMPLATE_README","setStagedCommunityTemplate","setStagedTemplateUrl","updateTemplateEnvReferences","envRefKey","resourceField","toggleTemplateResourceInstall","resourceType","templateMetaName","shouldInstall","setStacks","setTemplateReadMe","readmeText","authSchema","Authorizations","arrayOfAuths","getTimeRangeVars","getRangeVariable","findIncludedsFromRelationships","includeds","intersection","findIncludedFromRelationship","findLabelsToCreate","currentLabels","findIncludedVariables","findVariablesToCreate","existingVariables","incomingVariables","hasLabelsRelationships","getLabelRelationships","getTemplateNameFromUrl","urlSplit","fullName","pop","getGithubUrlFromTemplateDetails","templateExtension","TEMPLATE_URL_VALID","TEMPLATE_URL_WARN","validateTemplateURL","cleanUrl","isCommunityTemplates","isCorrectFileType","readMeFormatter","PROJECT_NAME","DEFAULT_PROJECT_NAME","PROJECT_NAME_SHORT","PROJECT_NAME_PLURAL","EMPTY_STATE","ResultsContext","ResultsProvider","setResults","updates","inc","setInc","sChange","rChange","stats","MinMaxInputs","initialMin","initialMax","onSetMinMax","minInput","setMinInput","maxInput","setMaxInput","emitIfValid","newMin","newMax","handleKeyPress","formatDomainValue","showInputs","setShowInputs","formatToLuxonMap","regex","getLuxonFormatString","formattedDateTimeString","dateFnsFormatString","isValidStrictly","strictCheck","isValidRFC3339","tickOption","getView","updateView","cloneUtilFunc","oldDashID","clonedDashID","newCell","downloadDashboardTemplate","postSignin","postSignout","getPing","getDbrps","postDbrp","getDbrp","dbrpID","patchDbrp","deleteDbrp","getTelegrafPlugins","getTelegrafs","postTelegraf","getTelegraf","telegrafID","putTelegraf","deleteTelegraf","getTelegrafsLabels","postTelegrafsLabel","deleteTelegrafsLabel","getTelegrafsMembers","postTelegrafsMember","deleteTelegrafsMember","getTelegrafsOwners","postTelegrafsOwner","deleteTelegrafsOwner","getVariablesLabels","postVariablesLabel","deleteVariablesLabel","postWrite","postDelete","postLabel","getLabel","patchLabel","deleteLabel","getDashboard","patchDashboard","deleteDashboard","postDashboardsCell","putDashboardsCells","patchDashboardsCell","deleteDashboardsCell","getDashboardsCellsView","patchDashboardsCellsView","getDashboardsLabels","postDashboardsLabel","deleteDashboardsLabel","getDashboardsMembers","postDashboardsMember","deleteDashboardsMember","getDashboardsOwners","postDashboardsOwner","deleteDashboardsOwner","postQueryAst","getQuerySuggestions","getQuerySuggestion","postQueryAnalyze","postQuery","getBuckets","postBucket","getBucket","patchBucket","deleteBucket","getBucketsLabels","postBucketsLabel","deleteBucketsLabel","getBucketsMembers","postBucketsMember","deleteBucketsMember","getBucketsOwners","postBucketsOwner","deleteBucketsOwner","getOrgs","postOrg","patchOrg","deleteOrg","getOrgsSecrets","patchOrgsSecrets","getOrgsMembers","postOrgsMember","deleteOrgsMember","getOrgsOwners","postOrgsOwner","deleteOrgsOwner","postOrgsSecretsDelete","deleteOrgsSecret","getResources","getStacks","postStack","getStack","patchStack","postStacksUninstall","postTemplatesApply","postTemplatesExport","getTasksRuns","postTasksRun","getTasksRun","deleteTasksRun","postTasksRunsRetry","getTasksLogs","getTasksRunsLogs","getTasksLabels","postTasksLabel","deleteTasksLabel","putMePassword","getTasksMembers","postTasksMember","deleteTasksMember","getTasksOwners","postTasksOwner","deleteTasksOwner","postUsersPassword","getChecks","postCheck","getCheck","putCheck","patchCheck","deleteCheck","getChecksLabels","postChecksLabel","deleteChecksLabel","getNotificationRules","postNotificationRule","getChecksQuery","getNotificationRule","ruleID","putNotificationRule","patchNotificationRule","deleteNotificationRule","getNotificationRulesLabels","postNotificationRulesLabel","deleteNotificationRulesLabel","getNotificationRulesQuery","getNotificationEndpoints","postNotificationEndpoint","getNotificationEndpoint","putNotificationEndpoint","patchNotificationEndpoint","deleteNotificationEndpoint","getNotificationEndpointsLabels","postNotificationEndpointsLabel","deleteNotificationEndpointsLabel","getDebugPprofAll","getDebugPprofAllocs","getDebugPprofBlock","getDebugPprofCmdline","getDebugPprofGoroutine","getDebugPprofHeap","getDebugPprofMutex","getDebugPprofProfile","getDebugPprofThreadcreate","getDebugPprofTrace","getHealth","getMetrics","getReady","getUsers","postUser","getUser","patchUser","deleteUser","getSetup","postSetup","getAuthorizations","postAuthorization","getAuthorization","authID","patchAuthorization","deleteAuthorization","postVariable","getVariable","putVariable","patchVariable","getSources","postSource","getSource","sourceID","patchSource","deleteSource","getSourcesHealth","getSourcesBuckets","getScrapers","postScraper","getScraper","scraperTargetID","patchScraper","deleteScraper","getScrapersLabels","postScrapersLabel","deleteScrapersLabel","getScrapersMembers","postScrapersMember","deleteScrapersMember","getScrapersOwners","postScrapersOwner","deleteScrapersOwner","getBackupKv","getBackupMetadata","getBackupShard","shardID","postRestoreKv","postRestoreSql","postRestoreBucket","postRestoreBucketMetadata","postRestoreShards","getConfig","getRemotes","postRemote","getRemote","remoteID","patchRemote","deleteRemote","getReplications","postReplication","getReplication","replicationID","patchReplication","deleteReplication","postReplicationsValidate","getDashboards","postDashboard","getTasks","postTask","getTask","patchTask","deleteTask","ValueTickInput","tickPropertyName","tickOptions","initialTickOptionValue","elementStylingClass","tickOptionInput","setTickOptionInput","tickOptionInputStatus","setTickOptionInputStatus","handleInput","updateTickOption","convertedValue","tickOptionNameWithoutAxis","tickOptionNameWithAxis","filteredTickOptions","noOp","TimeTickInput","dateFormatPlaceholder","initialTick","initialDate","getInitialTimeTick","isDatePickerOpen","setIsDatePickerOpen","isOnClickOutsideHandlerActive","setIsOnClickOutsideHandlerActive","computedTickOptions","getDatePickerDateTime","handleReset","hideDatePicker","dateRFC3339","allowOnClickOutside","suppressOnClickOutside","innerWidth","transform","ToTheLeft","enableDefaultStyles","onMouseEnter","onMouseLeave","Calendar","generateAxisTicks","hasTotalTicks","hasTickStart","hasTickStep","totalTicks","tickStart","tickStep","shouldShowInputs","setShouldShowInputs","getGenerateAxisTicksOptionsNames","axisTickOption","autoAggregateableQueries","queryIsNotEmpty","originalQueryInScriptEditorMode","alteredQuery","originalQueryText","normView","updateViewAndVariables","getViewAndResultsForVEO","timeMachineID","updatedView","pendingResults","getBrowserBasepath","getAttribute","getAPIBasepath","stripPrefix","getBasepath","supportRequestError","ConnectorState","StepStatus","SET_SCROLL","SET_CELL_MOUNT","SET_DASHBOARD_VISIT","setScroll","scroll","setCellMount","mountStartMs","setDashboardVisit","startVisitMs","ruleToString","hours","days","secondsToDuration","rpString","checkSchema","arrayOfChecks","findNodes","predicate","innerValue","isQueryViewProperties","vp","getAllUsedVars","varsInUse","usedV","filterUnusedVarsBasedOnQuery","queryTexts","astims","cachedVars","createdUsedVarsCache","variableSchema","arrayOfVariables","endpointSchema","NotificationEndpoints","addEndpointDefaults","arrayOfEndpoints","ruleSchema","NotificationRules","arrayOfRules","GetBrokerSubParams","PostBrokerSubParams","PutBrokerSubParams","DeleteBrokerSubParams","GetBrokerSubsStatusParams","PutBrokerSubsStatusParams","subscription","getByIDAPI","updateStatusAPI","getAllStatuses","DEFAULT_LIMIT","resolvedDurations","selectedScale","needle","findSelectedScale","fetchAllBuckets","limit","static","shouldComponentUpdate","errorComponent","next","prettyid","FlowContext","cloneNotebook","updateMeta","updateOther","populate","GENERATOR_INDEX","FlowProvider","currentFlow","setCurrentFlow","provider","yDoc","handleDeleteNotebook","handleCloneNotebook","handleGetNotebook","notebookId","syncFunc","isSynced","flowUpdateData","getMap","toJSON","closeFunc","disconnect","host","hydrated","off","flowCopy","prop","initialTemplate","isLimitError","getBucketLimitStatus","limits","extractBucketMax","maxAllowed","extractBucketMaxRetentionSeconds","maxRetentionSeconds","getBucketRetentionLimit","extractDashboardLimits","dashboards","extractDashboardMax","extractTaskLimits","extractTaskMax","extractChecksLimits","checks","extractChecksMax","extractRulesLimits","rules","extractRulesMax","extractEndpointsLimits","extractEndpointsMax","extractBlockedEndpoints","blocked","extractRateLimitStatus","rate","writeKBs","readKBs","cardinality","extractRateLimitResources","rateLimitedResources","ColorDropdown","onChoose","onChangeValue","onChangeColor","onRemove","isBaseThreshold","isRemoveable","dropdownStyle","Remove_New","sortThresholds","randomTick","domainWidth","roundTo","random","inputs","minThreshold","maxThreshold","validateThresholds","newThreshold","colorChoice","firstThresholdType","thresholdType","addThreshold","unknownActionType","reducer","defaultState","prevDefaultState","reduceDefaultState","wrappedReducer","reducerState","useOneWayReducer","SET_FEATURE_FLAGS","SET_PUBLIC_FEATURE_FLAGS","RESET_FEATURE_FLAGS","CLEAR_FEATURE_FLAG_OVERRIDES","SET_FEATURE_FLAG_OVERRIDE","SET_FEATURE_FLAG_OVERRIDES","setFlags","setPublicFlags","clearOverrides","setOverride","SET_SCRAPERS","ADD_SCRAPER","EDIT_SCRAPER","REMOVE_SCRAPER","setScrapers","addScraper","editScraper","removeScraper","SET_MEMBERS","ADD_MEMBER","REMOVE_MEMBER","setMembers","addMember","removeMember","RATE_LIMIT_ERROR_STATUS","RATE_LIMIT_ERROR_TEXT","ASSET_LIMIT_ERROR_STATUS","REQUEST_TIMEOUT_STATUS","GATEWAY_TIMEOUT_STATUS","extractVariableEditorName","variableEditor","extractVariableEditorType","extractVariableEditorQuery","argsQuery","extractVariableEditorMap","argsMap","extractVariableEditorConstant","argsConstant","getUserVariableNames","contextIDs","getVariablesForDashboard","getAllVariables","getAllVariablesForZoomRequery","sortVariablesByName","ctx","timeVars","vals","normalizeValues","isExtensible","asAssignment","getDashboardVariablesStatus","getControlBarVisibility","userSettings","showVariablesControls","getOauthClientConfig","getLimitevents","getOrgsLimits","putOrgsLimits","patchOrgsLimits","getOrgsLimitsStatus","getOrgsSettings","putOrgsSettings","postSetupUser","putProvision","postProvisionDelete","putProvisionUser","postProvisionUserDelete","postProvisionSetup","postProvisionSuspend","postProvisionUnsuspend","DataExplorerPage","TasksPage","TaskRunsPage","TaskEditPage","TaskImportOverlay","DashboardsIndex","DashboardContainer","FlowPage","VersionPage","BucketsIndex","TokensIndex","TelegrafsPage","ScrapersIndex","WriteDataPage","FileUploadsPage","ClientLibrariesPage","TelegrafPluginsPage","SecretsIndex","VariablesIndex","LabelsIndex","OrgProfilePage","AlertingIndex","AlertHistoryIndex","CheckHistory","MembersIndex","RouteToDashboardList","FlowsIndex","UsersPage","UsagePage","BillingPage","OperatorPage","AccountPage","UserAccountPage","OrgOverlay","CheckoutPage","SubscriptionsLanding","CreateSubscriptionForm","HomepageContainer","ArduinoWizard","PythonWizard","NodejsWizard","GoWizard","CliWizard","DetailsSubscriptionPage","parseASTIM","parseAllVariables","variableNames","getAST","ThresholdFormat","EQUALITY_THRESHOLD_TYPES","equal","Value","COMMON_THRESHOLD_TYPES","greater","less","between","deadmanType","handleKeyValidation","setNewSecret","handleDismiss","Label","VariablesContext","VariablesProvider","pipeRange","windowVar","getLegibleTextColor","bgColorHex","red","green","blue","rgb","findNearestCrossedThreshold","sortedColors","generateThresholdsListHexs","defaultColoring","lastValueNumber","baseColor","shouldColorizeText","nearestCrossedThreshold","humanizeNote","classname","deleteButton","onDragStart","emptyFunction","isInCheckOverlay","scrollable","scrollbarStyles","addPadding","setDashboardLimitStatus","SetDashboardLimitStatus","setBucketLimitStatus","SetBucketLimitStatus","setTaskLimitStatus","SetTaskLimitStatus","setChecksLimitStatus","SetChecksLimitStatus","setRulesLimitStatus","SetRulesLimitStatus","setEndpointsLimitStatus","SetEndpointsLimitStatus","setReadRateLimitStatus","SetReadRateLimitStatus","setWriteRateLimitStatus","SetWriteRateLimitStatus","setCardinalityLimitStatus","SetCardinalityLimitStatus","setLimitsStatus","SetLimitsStatus","getReadWriteCardinalityLimits","write","getAssetLimits","SetLimits","checkDashboardLimits","dashboardsMax","dashboardsCount","checkBucketLimits","bucketsMax","bucketsCount","checkTaskLimits","tasksMax","tasksCount","checkChecksLimits","checksMax","checksCount","checkRulesLimits","rulesMax","rulesCount","checkEndpointsLimits","endpointsCount","endpointsMax","setQueryResults","pendingCheckStatuses","getOrgIDFromBuckets","bucketsInQuery","isFromBucket","bucketMatch","getQueryFromFlux","aggregateWindowQuery","isFromFunction","functionsInQuery","tagsKeysInQuery","isFromTag","tagsValuesInQuery","functionName","aggregateWindowName","generateHashedQueryID","hashedQuery","queryReference","cancelQueryByHashID","cancelAllRunningQueries","queryIDs","setQueryByHashID","issuedAt","executeQueries","executeQueriesStartTime","performance","startDate","saveAndExecuteQueries","resizeLayout","createEvent","initEvent","queryStringConfig","showTemplateControlBar","commit","initialAppEphemeralState","initialAppPersistedState","SetAutoRefresh","milliseconds","notifications","publishedNotification","accountCount","firstName","lastName","operatorRole","orgCount","clusterHost","paygCreditStartDate","original","newState","INITIAL_STATE","defaultOptions","taskScheduleType","unselected","toBucketName","toOrgName","setResourceAtID","prevResource","currentResource","addResource","editResource","removeResource","uuid","setRelation","childType","childID","parentID","newScript","currentTask","currentScript","showInactive","taskOptions","dashboardsReducer","cID","cellsReducer","cellExists","orgsReducer","nullParams","Incomplete","setupParams","Adding","isPreviewing","overlayVisible","telegrafPlugins","telegrafConfigID","pluginBundles","scraperTarget","telegrafConfigName","telegrafConfigDescription","locationOnDismiss","steps","stepIndex","substep","dataLoaders","tp","updatedConfigFieldValue","filteredConfigFieldValue","configValues","valueIndex","configFields","configured","Configured","isValidConfig","fieldValue","InvalidConfiguration","variableEditorReducer","variablesReducer","variableExists","labelsReducer","bucketsReducer","telegrafsReducer","currentConfig","authsReducer","currentAuth","allResources","stagedCommunityTemplate","sources","stagedTemplateEnvReferences","stagedTemplateUrl","communityTemplateReadmeCollection","exportTemplate","envReferences","telegrafConfigs","telegrafConfig","notificationRules","notificationRule","notificationEndpoints","notificationEndpoint","summaryTask","templateToInstall","readme","scrapersReducer","userSettingsReducer","showAnnotationsControls","annotationsReducer","streams","visibleStreamsByID","cellAnnotations","annotationStream","isEnabled","membersReducer","autoRefreshReducer","inactivityTimeout","defaultLimit","defaultLimitWithBlocked","queryTime","limitsReducer","maxBuckets","maxRetentionDuration","maxDashboards","maxTasks","maxChecks","maxNotifications","blockedNotificationRules","blockedNotificationEndpoints","SetQueryTimeRateLimitStatus","defaultChecksState","defaultNotificationRulesState","secretsReducer","INITIAL_PLUGINS","include","INITIAL_EDITOR","showLookup","showList","pluginsReducer","plugs","pluginsResourceReducer","activePluginsReducer","editorReducer","statusMessageTemplate","timeSince","reportZero","staleTime","newTags","tagSet","filteredThresholds","oldDefaultOrg","oldDefaultOrgId","newIdCount","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","configureStore","routingMiddleware","createPersistentStore","enhancer","subscribe","router","currentExplorer","dataLoading","noteEditor","onboarding","overlays","perf","plugins","members","scrapers","telegrafs","templates","tokens","telegrafEditor","telegrafEditorActivePlugins","telegrafEditorPlugins","VERSION","storeSingleton","getStore","deleteAccount","getAccounts","getAccount","patchAccount","getAccountsOrgs","putAccountsOrgsDefault","putAccountsDefault","getBilling","getIdentity","getMarketplace","getBillingStartDate","getUsageVectors","getUsage","vector_name","getUsageBillingStats","getUsageRateLimits","getSettingsNotifications","putSettingsNotifications","putBillingContact","getPaymentForm","form","putBillingPaymentMethod","getBillingInvoices","getOrgsInvites","postOrgsInvite","deleteOrgsInvite","inviteId","postOrgsInvitesResend","getOrgsUsers","deleteOrgsUser","userId","postCheckout","postCancel","getOperatorAccounts","getOperatorAccount","deleteOperatorAccount","patchOperatorAccountsConvert","getOperatorProviders","getOperatorOrgs","getOperatorOrg","getOperatorOrgsLimits","putOperatorOrgsLimits","getAuthConnection","isCorrectType","bound","normalizeRangesState","typedRange","getLocalStateRanges","normalizedRanges","rangesObject","getLocalStateRangesAsArray","setLocalStateRanges","normalizeApp","normalizeAppPersisted","normalizeTimeZone","timeZones","tz","normalizeResources","normalizeOrgs","loadLocalStorage","serializedState","localStorage","normalizeGetLocalStorage","setToLocalStorage","getFromLocalStorage","removeFromLocalStorage","removeItem","saveToLocalStorage","normalizeSetLocalStorage","errorString","isValidJSONString","getNotifications","converter","WarningLight","HotelBreakfast","DangerDark","DefaultLight","SecondaryDark","matchGradientToColor","onTimeout","convertIdentityToMe","quartzIdentity","regionCode","regionName","getQuartzIdentityThunk","legacyMe","getBillingProviderThunk","accountDetails","updatedState","getCurrentOrgDetailsThunk","AppSettingContext","_zone","_theme","setPresentationMode","_active","setNavbarMode","_mode","_flowsCTA","AppSettingProvider","_timeZone","feature","LabelColorType","NoteEditorMode","self","DEFAULT_CHECK_NAME","DEFAULT_NOTIFICATION_RULE_NAME","CHECK_NAME_MAX_LENGTH","DEFAULT_CHECK_EVERY","DEFAULT_CHECK_OFFSET","DEFAULT_CHECK_TAGS","DEFAULT_CHECK_REPORT_ZERO","DEFAULT_DEADMAN_LEVEL","DEFAULT_STATUS_MESSAGE","CHECK_OFFSET_OPTIONS","MONITORING_BUCKET","LEVEL_COLORS","OK","Viridian","INFO","Ocean","WARN","Thunder","CRIT","UNKNOWN","Amethyst","LEVEL_COMPONENT_COLORS","DEFAULT_ENDPOINT_URLS","slack","pagerduty","http","NEW_ENDPOINT_DRAFT","SET_ME","SET_QUARTZ_ME","SET_QUARTZ_ME_STATUS","setMe","setQuartzMe","setQuartzMeStatus","OverlayState","CancellationError","ResourceType","editCheckCodeWarning","editNotificationRuleCodeWarning","getChecksFailed","getCheckFailed","getNotificationRulesFailed","getNotificationRuleFailed","createCheckFailed","updateCheckFailed","deleteCheckFailed","createRuleFailed","getViewFailed","getEndpointFailed","getEndpointsFailed","createEndpointFailed","updateEndpointFailed","deleteEndpointFailed","testNotificationSuccess","testNotificationFailure","exportAlertToTaskSuccess","getResourcesTokensFailure","tokenType","getFluxPackagesFailed","OSS_FLAGS","streamEvents","exploreWithFlows","boardWithFlows","createWithFlows","leadWithFlows","CLOUD_FLAGS","activeFlags","configCatFlags","localFlagOverrides","localFlags","getFlagStatus","SET_ORGS","SET_ORG","ADD_ORG","REMOVE_ORG","EDIT_ORG","setOrgs","setOrg","addOrg","removeOrg","editOrg","AGG_WINDOW_AUTO","DEFAULT_FILLVALUES","DEFAULT_AGGREGATE_FUNCTION","DURATIONS","genFlux","AUTO_FUNCTIONS","getDefaultAutoFunctions","activeGraphType","FUNCTIONS","DELETE_ANNOTATION","SET_ANNOTATIONS","SET_ANNOTATION_STREAMS","TOGGLE_ANNOTATIONS_MODE","EDIT_ANNOTATION","setAnnotations","setAnnotationStreams","setAnnotationsMode","SET_CHECKS","SET_CHECK","REMOVE_CHECK","REMOVE_LABEL_FROM_CHECK","setChecks","setCheck","removeCheck","removeLabelFromCheck","SET_RULES","SET_RULE","SET_CURRENT_RULE","REMOVE_RULE","REMOVE_LABEL_FROM_RULE","setRules","setRule","setCurrentRule","removeRule","removeLabelFromRule","SET_ENDPOINT","REMOVE_ENDPOINT","SET_ENDPOINTS","REMOVE_LABEL_FROM_ENDPOINT","removeEndpoint","setEndpoint","setEndpoints","removeLabelFromEndpoint","emptyAccount","emptyOrg","getOrganizations","organizations","organizationIds","createOrgWithBucket","createdOrg","orgResp","normOrg","bucketResp","renameOrg","originalName","updatedOrg","RunQueryPromiseMutex","cached","processing","runStatusesQuery","processStatusesResponse","queryPromise","rows","tableIndex","tagFilters","formatTagFilterPredicate","previousKeyFilter","formatTagKeyFilterCall","searchFilter","formatTimeRangeArguments","extractBoxedCol","extractCol","validSelections","useNewStyling","itemRef","classer","useOneWayState","isFirstRender","resetAlertBuilder","initializeAlertBuilder","setAlertBuilderCheck","setAlertBuilderCheckStatus","setEvery","setOffset","setStaleTime","setTimeSince","setLevel","setStatusMessageTemplate","editTagSetByIndex","removeTagSet","removeThreshold","timeMachineUpdate","updateStaticLegendProperties","notebookViewProperties","notebookStaticLegend","updatedProperties","showState","renderEffect","staticLegendHeight","totalHeight","legendDataLength","lineCount","headerTextMetrics","sampleTextMetrics","headerMaxHeight","sampleMaxHeight","estimatedHeight","updatedHeightRatio","formatConstant","constant","EMPTY_ZUORA_PARAMS","tenantId","signature","submitEnabled","BALANCE_THRESHOLD_DEFAULT","MINIMUM_BALANCE_THRESHOLD","PRESENTATION_MODE_ANIMATION_DELAY","AUTOREFRESH_DEFAULT_INTERVAL","AUTOREFRESH_DEFAULT","Paused","infiniteDuration","LAYOUT_MARGIN","DASHBOARD_LAYOUT_ROW_HEIGHT","FIVE_SECONDS","TEN_SECONDS","FIFTEEN_SECONDS","INDEFINITE","HOMEPAGE_PATHNAME","GIT_SHA","BASE_PATH","API_BASE_PATH","HONEYBADGER_KEY","HONEYBADGER_ENV","AMPLITUDE_KEY","RUDDERSTACK_DATA_PLANE_URL","RUDDERSTACK_WRITE_KEY","CLOUD","CLOUD_SIGNIN_PATHNAME","CLOUD_SIGNOUT_PATHNAME","CLOUD_LOGIN_PATHNAME","CLOUD_QUARTZ_URL","FLUX_RESPONSE_BYTES_LIMIT","VIS_SIG_DIGITS","VIS_THEME","axisColor","gridColor","gridOpacity","tickFont","tickFontColor","Grey75","legendFont","legendFontColor","legendFontBrightColor","legendBackgroundColor","legendBorder","legendCrosshairColor","VIS_THEME_LIGHT","GIRAFFE_COLOR_SCHEMES","MARKDOWN_UNSUPPORTED_IMAGE","GLOBALSEARCH_APP_ID","GLOBALSEARCH_API_KEY","PAYG_CREDIT_DAYS","PAYG_MAX_CREDIT","CREDIT_250_EXPERIMENT_ID","PAYG_CREDIT_EXPERIMENT_ID","CREDIT_250_EXPERIENCE_CUTOFF_EPOCH","INFLUXDATA_SUPPORT_CONTACT_UK","INFLUXDATA_SUPPORT_CONTACT_UK_TELEPHONE_LINK","INFLUXDATA_SUPPORT_CONTACT_US","INFLUXDATA_SUPPORT_CONTACT_US_TELEPHONE_LINK","TOOLS_URL","SortTypes","collator","Collator","orderByType","Float","getSortedResources","resourceList","item1","item2","compare","sendEvent","eventStorageKey","eventStorageValue","generateMap","printMap","queryAll","queryDependents","FlowQueryContext","FlowQueryProvider","queryAPI","basicAPI","notebookQueryKey","_generateMap","handler","passive","useEvent","_queryAll","_map","stages","panelID","last","doubleForceUpdate","_override","stati","_queryDependents","startID","stage","pageTitleSuffixer","pageTitles","getTimeRange","getTimeRangeWithTimezone","getTimeZone","setTimeToUTC","sortDashboardByName","isCurrentPageDashboard","utcTime","setUTCMinutes"],"mappings":"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,eACR/gB,KAAM,gBAAc+sB,YANlB,EAAW,aADhB,I,2CACK,GA4GS,IChJH+1C,EAUAC,EAOAC,EAQAC,EAOAC,EAWAC,EAMAC,EAKAC,EAwBAC,EAkFAC,EAeAC,EAMAC,EAMAC,EAKAC,EDhDG,KChJf,SAAYb,GACV,oBACA,oBACA,wBACA,oBACA,oBACA,kBACA,gBAPF,CAAYA,MAAc,KAU1B,SAAYC,GACV,kBACA,aACA,cACA,aAJF,CAAYA,MAAa,KAOzB,SAAYC,GACV,oBACA,oBACA,gBACA,gBACA,sBALF,CAAYA,MAAe,KAQ3B,SAAYC,GACV,sBACA,wBACA,sBACA,cAJF,CAAYA,MAAkB,KAO9B,SAAYC,GACV,gBACA,gBAFF,CAAYA,MAAoB,KAWhC,SAAYC,GACV,iBACA,kBACA,yBAHF,CAAYA,MAAW,KAMvB,SAAYC,GACV,kBACA,kBAFF,CAAYA,MAAU,KAKtB,SAAYC,GACV,qBACA,kBACA,mBACA,mBACA,iBACA,mBACA,kBACA,qBACA,kBACA,qBACA,iBACA,qBACA,kBACA,iBACA,qBACA,qBACA,kBACA,oBACA,kBACA,kBACA,kBArBF,CAAYA,MAAK,KAwBjB,SAAYC,GACV,qBACA,iCACA,kBACA,sBACA,+BACA,sBACA,uBACA,cACA,6BACA,yBACA,sBACA,yBACA,yBACA,yBACA,2BACA,qBACA,cACA,wBACA,kBACA,6BACA,gBACA,2BACA,2BACA,sBACA,+BACA,sBACA,cACA,6BACA,qBACA,0BACA,iBACA,iBACA,iBACA,gBACA,sBACA,wBACA,qBACA,qBACA,kBACA,YACA,yBACA,qBACA,kBACA,kBACA,0BACA,gBACA,kBACA,kBACA,kBACA,cACA,gBACA,oBACA,cACA,gBACA,kBACA,cACA,cACA,2BACA,kBACA,oBACA,kBACA,kBACA,mBACA,oBACA,kBACA,yBACA,gBACA,sBACA,cACA,qBACA,6BACA,2BACA,uBACA,yBACA,cACA,kBACA,cACA,cACA,YA/EF,CAAYA,MAAQ,KAkFpB,SAAYC,GACV,iBACA,iBACA,qBACA,mBACA,mBACA,i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,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,MACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,IACFC,EAAE,MACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,IACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,IACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAGX,2BACE,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,MACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,MACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVg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MACFC,QAAQ,cACRgtE,oBAAoB,aAEpB,0BACEltE,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,MACFC,EAAE,KACF3D,UAAU,wCACVgE,MAAM,KACNC,OAAO,OAET,0BACEP,EAAE,KA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A,iCACA,0BACA,6BACA,6BACA,4BACA,4BACA,gBACA,mBACA,mBACA,eACA,gBACA,yBACA,mBACA,gBACA,iBACA,uBACA,oBACA,iBACA,gBACA,uBACA,wBACA,uBACA,iBACA,kBACA,oBACA,kBACA,iBACA,kBACA,oBACA,wBACA,kBACA,qBACA,kBACA,iBACA,kBACA,uBACA,iBACA,uBACA,iBACA,kBACA,mBACA,mBACA,mBACA,sBACA,mBACA,sBACA,qBACA,oBACA,oBACA,kBACA,oBACA,qBACA,kBACA,qBACA,oBACA,oBACA,iBACA,kBACA,iBACA,qBACA,+BACA,uBACA,0BACA,6BACA,4BACA,wBACA,4BACA,0BACA,uBACA,iBACA,kBACA,kBACA,gBACA,iBACA,8BACA,8BACA,kBACA,qBACA,iBACA,eACA,sBACA,qBACA,wBACA,iBACA,kBACA,iBACA,kBACA,qBACA,oBACA,mBACA,kBACA,oBACA,iBACA,qBACA,sBACA,mBACA,kBACA,oBACA,qBACA,mBACA,qBACA,iBACA,mBACA,kBACA,eACA,kBACA,8BACA,8BACA,iCACA,kBACA,iBACA,sBACA,qBACA,kBACA,wBACA,yBACA,qBACA,sBACA,sBACA,uBACA,sBACA,uBACA,iBACA,iBACA,mBACA,qBACA,kBACA,uBACA,mBACA,mBACA,wBACA,oBACA,uBACA,mBACA,gBACA,wBACA,mBACA,mBACA,mBACA,oBACA,qBACA,wBACA,sBACA,gBACA,sBACA,kBACA,kBACA,kBACA,oBACA,iBACA,qBACA,mBACA,kBACA,sBACA,mBACA,mBACA,4BACA,uBACA,oBACA,qBACA,oBACA,qBACA,wBACA,mBACA,mBACA,oBACA,sBACA,YACA,cACA,aACA,cACA,aACA,cACA,gBACA,iBACA,cACA,eACA,eACA,YACA,eACA,eACA,cACA,eACA,cACA,gBACA,aACA,kBACA,iBACA,iBACA,eACA,aACA,gBACA,aACA,YACA,aACA,gBACA,iBACA,YACA,cACA,cACA,mBACA,iBACA,YACA,eACA,gBACA,eACA,gBACA,iBACA,aACA,iBACA,eACA,eACA,iBACA,gBACA,gBACA,eACA,mBACA,oBACA,eACA,cACA,aACA,aACA,eACA,gBACA,cACA,cACA,oBACA,mBACA,YACA,YACA,kBACA,iBACA,iBACA,aACA,iBACA,eACA,cACA,cACA,gBACA,iBACA,aACA,gBACA,iBACA,qBACA,cACA,gBACA,eACA,cACA,gBACA,cACA,eACA,aACA,aACA,qBACA,mBACA,kBACA,cACA,gBACA,iBACA,mBACA,eACA,cACA,qBACA,eACA,kBACA,mBACA,kBACA,sBACA,kBACA,iBACA,qBACA,mBACA,qBACA,yBACA,qBACA,mBACA,gBACA,qBACA,qBACA,wBACA,qBACA,mBACA,mBACA,kBACA,mBACA,gBACA,qBACA,sBACA,sBACA,kBACA,gBACA,kBACA,uBACA,kBACA,mBACA,qBACA,qBACA,iBACA,uBACA,cACA,mBACA,cACA,cACA,kBACA,iBACA,iBACA,kBACA,sBACA,iBACA,sBACA,eACA,MACA,oBACA,qBACA,UACA,OACA,MACA,QACA,OACA,MACA,UACA,UACA,YACA,YACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,WACA,YACA,YACA,aACA,aACA,aACA,aACA,aACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,gBACA,UACA,gBACA,UACA,WACA,mBACA,iBACA,mBACA,gBACA,iBACA,kBACA,gBACA,oBACA,kBACA,mBACA,kBACA,kBACA,kBACA,oBACA,gBACA,mBACA,kBACA,kBACA,qBACA,kBACA,gBACA,qBACA,cACA,eACA,gBACA,mBACA,gBACA,oBACA,gBACA,eACA,mBACA,eACA,gBACA,gBACA,eACA,cACA,eACA,mBACA,gBACA,cACA,cACA,gBACA,oBACA,kBACA,iBACA,oBACA,gBACA,eACA,mBACA,iBACA,gBACA,kBACA,mBACA,kBACA,eACA,iBACA,gBACA,iBACA,mBACA,gBACA,gBACA,oBACA,gBACA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","file":"32.c9bf92d8de.js","sourcesContent":["import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./CloudLogoWithCubo.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import {\n Icon,\n IconFont,\n InfluxColors,\n InfluxDBCloudLogo,\n} from '@influxdata/clockface'\nimport React, {FC} from 'react'\n\nimport './CloudLogoWithCubo.scss'\n\nconst CloudLogoWithCubo: FC = () => (\n
\n \n \n
\n)\n\nexport {CloudLogoWithCubo}\n","import React, {FC} from 'react'\nimport {FontWeight, Heading, HeadingElement} from '@influxdata/clockface'\n\nconst HelperText: FC = ({children}) => (\n \n {children}\n \n)\n\nexport default HelperText\n","// Libraries\nimport React, {FC, useState, ChangeEvent, MouseEvent} from 'react'\nimport {\n Button,\n ButtonShape,\n ButtonType,\n Columns,\n ComponentColor,\n ComponentSize,\n ComponentStatus,\n FlexBox,\n Form,\n Grid,\n Input,\n InputType,\n VisibilityInput,\n FlexDirection,\n JustifyContent,\n} from '@influxdata/clockface'\nimport HelperText from 'src/onboarding/components/HelperText'\n\n// Types\nimport {FormFieldValidation} from 'src/types'\n\n// Constants\nimport {CLOUD_URL} from 'src/shared/constants'\n\ninterface Props {\n buttonStatus: ComponentStatus\n emailValidation: FormFieldValidation\n email: string\n passwordValidation: FormFieldValidation\n password: string\n handleInputChange: (event: ChangeEvent) => void\n handleForgotPasswordClick: (event: MouseEvent) => void\n}\n\nexport const LoginForm: FC = ({\n buttonStatus,\n emailValidation,\n email,\n passwordValidation,\n password,\n handleInputChange,\n handleForgotPasswordClick,\n}) => {\n const [isVisible, toggleVisibility] = useState(false)\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n toggleVisibility(!isVisible)}\n />\n \n \n \n \n \n \n \n Forgot Password\n \n \n \n Sign Up\n \n \n \n \n )\n}\n","// Libraries\nimport React, {FC} from 'react'\nimport {ButtonBase, ButtonShape, ComponentSize} from '@influxdata/clockface'\n\ninterface Props {\n buttonText: string\n children: JSX.Element\n className?: string\n handleClick?: () => void\n}\n\nexport const SocialButton: FC = ({\n buttonText,\n children,\n className,\n handleClick,\n}) => {\n return (\n \n {children}\n {buttonText}\n \n )\n}\n","// Libraries\nimport React, {FC} from 'react'\nimport classnames from 'classnames'\n\ninterface Props {\n className?: string\n}\n\nexport const GoogleLogo: FC = ({className}) => (\n \n \n \n \n \n \n)\n","import React, {FC} from 'react'\nimport classnames from 'classnames'\n\ninterface Props {\n className?: string\n}\n\nexport const MicrosoftLogo: FC = ({className}) => {\n const microsoftClassname = classnames('microsoft-logo', className)\n return (\n \n Microsoft icon\n \n \n \n \n \n )\n}\n","// Libraries\nimport React, {PureComponent, ChangeEvent, FormEvent} from 'react'\nimport {connect, ConnectedProps} from 'react-redux'\nimport {\n AlignItems,\n ComponentSize,\n ComponentStatus,\n FlexBox,\n FlexDirection,\n Grid,\n Heading,\n HeadingElement,\n JustifyContent,\n Method,\n Panel,\n} from '@influxdata/clockface'\nimport auth0js, {WebAuth} from 'auth0-js'\n\n// Components\nimport {LoginForm} from 'src/onboarding/components/LoginForm'\nimport {SocialButton} from 'src/shared/components/SocialButton'\nimport {GoogleLogo} from 'src/shared/graphics/GoogleLogo'\nimport {MicrosoftLogo} from 'src/shared/graphics/MicrosoftLogo'\n\n// Types\nimport {Auth0Connection, FormFieldValidation} from 'src/types'\n\n// APIs & Actions\nimport {notify} from 'src/shared/actions/notifications'\nimport {passwordResetSuccessfully} from 'src/shared/copy/notifications'\nimport {getAuth0Config, getConnection} from 'src/authorizations/apis'\nimport {getFromLocalStorage} from 'src/localStorage'\n\nconst TOKEN_EXP = 10 * 60 * 1000 // 10 minutes\n\ninterface ErrorObject {\n emailError?: string\n passwordError?: string\n}\n\ninterface State {\n buttonStatus: ComponentStatus\n email: string\n emailError: string\n password: string\n passwordError: string\n}\n\ntype ReduxProps = ConnectedProps\ntype Props = ReduxProps\n\nclass LoginPageContents extends PureComponent {\n private auth0: typeof WebAuth\n private interval: NodeJS.Timeout\n\n state: State = {\n buttonStatus: ComponentStatus.Default,\n email: '',\n emailError: '',\n password: '',\n passwordError: '',\n }\n\n private getAuth0Config = async (\n redirectTo: string\n ): Promise => {\n try {\n const config = await getAuth0Config(redirectTo)\n this.auth0 = new auth0js.WebAuth({\n domain: config.domain,\n clientID: config.clientID,\n redirectUri: config.redirectURL,\n responseType: 'code',\n state: config.state,\n })\n } catch (error) {\n console.error(error)\n throw error\n }\n }\n\n public componentDidMount() {\n const redirectTo = getFromLocalStorage('redirectTo') || '/'\n this.getAuth0Config(redirectTo)\n // set an interval to get a new state session since the old one is only valid for ten minutes\n this.interval = setInterval(() => {\n this.getAuth0Config(redirectTo)\n }, TOKEN_EXP)\n }\n\n public componentWillUnmount() {\n // reset the auth0 client config\n this.auth0 = {}\n // reset the setInterval when unmounting\n clearInterval(this.interval)\n }\n\n render() {\n const {buttonStatus, email, emailError, password, passwordError} =\n this.state\n\n return (\n \n \n \n \n Continue with\n \n \n \n \n \n \n {\n this.handleSocialClick(Auth0Connection.Google)\n }}\n className=\"sign-up--google\"\n buttonText=\"Google\"\n >\n \n \n {\n this.handleSocialClick(Auth0Connection.Microsoft)\n }}\n buttonText=\"Microsoft\"\n >\n \n \n \n \n \n \n OR\n \n \n \n \n \n )\n }\n\n private get validateFieldValues(): {\n isValid: boolean\n errors: ErrorObject\n } {\n const {email, password} = this.state\n\n const emailError = email === '' ? 'Email is required' : ''\n const passwordError = password === '' ? 'Password is required' : ''\n\n const errors: ErrorObject = {\n emailError,\n passwordError,\n }\n\n const isValid = Object.values(errors).every(error => error === '')\n\n return {isValid, errors}\n }\n\n private formFieldTypeFactory = (\n errorMessage: string\n ): FormFieldValidation => ({\n errorMessage,\n hasError: errorMessage !== '',\n })\n\n private handleSubmit = async (event: FormEvent) => {\n event.preventDefault()\n const {email, password} = this.state\n\n if (email) {\n try {\n const connection = await getConnection(email)\n if (!!connection) {\n return this.auth0.authorize({connection})\n }\n } catch (e) {\n console.error(e)\n }\n }\n\n const {isValid, errors} = this.validateFieldValues\n\n if (!isValid) {\n this.setState(errors)\n return\n }\n\n this.setState({buttonStatus: ComponentStatus.Loading})\n\n this.auth0.login(\n {\n realm: Auth0Connection.Authentication,\n email,\n password,\n },\n error => {\n if (error) {\n this.setState({buttonStatus: ComponentStatus.Default})\n return this.displayErrorMessage(errors, error)\n }\n }\n )\n return\n }\n\n private displayErrorMessage = (errors, auth0Err) => {\n // eslint-disable-next-line\n if (/error in email/.test(auth0Err.code)) {\n this.setState({\n ...errors,\n emailError: 'Please enter a valid email address',\n })\n } else if (auth0Err.code === 'access_denied') {\n const emailError = `The email and password combination you submitted don't match. Please try again`\n this.setState({...errors, emailError})\n } else {\n const emailError = `We have been notified of an issue while accessing your account. If this issue persists, please contact support@influxdata.com`\n this.setState({...errors, emailError})\n }\n }\n\n private handleInputChange = (event: ChangeEvent) => {\n this.setState({[event.target.name]: event.target.value})\n }\n\n private handleSocialClick = (connection: Auth0Connection) => {\n this.auth0.authorize({\n connection,\n })\n }\n\n private handleForgotPasswordClick = event => {\n event.preventDefault()\n const {email} = this.state\n const {onNotify} = this.props\n if (!email) {\n this.setState({emailError: 'Please enter a valid email address'})\n return\n }\n this.auth0.changePassword(\n {\n email,\n connection: Auth0Connection.Authentication,\n },\n (error, successMessage) => {\n if (error) {\n this.setState({emailError: error.message})\n return\n }\n // notify user that change password email was sent successfully\n // By default auth0 will send a success message even if the operation fails:\n // https://community.auth0.com/t/auth0-changepassword-always-returns-ok-even-when-user-is-not-found/11081/8\n onNotify(passwordResetSuccessfully(successMessage))\n }\n )\n }\n}\n\nconst mdtp = {\n onNotify: notify,\n}\n\nconst connector = connect(null, mdtp)\n\nexport default connector(LoginPageContents)\n","// Libraries\nimport React, {FC, useCallback, useEffect, useState} from 'react'\nimport {\n AppWrapper,\n FontWeight,\n FunnelPage,\n Heading,\n HeadingElement,\n} from '@influxdata/clockface'\nimport {useHistory} from 'react-router-dom'\nimport Notifications from 'src/shared/components/notifications/Notifications'\nimport {CloudLogoWithCubo} from 'src/onboarding/components/CloudLogoWithCubo'\n\n// APIs\nimport {fetchIdentity, fetchLegacyIdentity} from 'src/identity/apis/auth'\n\n// Components\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\nimport LoginPageContents from 'src/onboarding/containers/LoginPageContents'\nimport {CLOUD, CLOUD_QUARTZ_URL} from 'src/shared/constants'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nconst EMPTY_HISTORY_STACK_LENGTH = 2\n\nexport const LoginPage: FC = () => {\n const [hasValidSession, setHasValidSession] = useState(false)\n\n const getSessionValidity = useCallback(async () => {\n try {\n if (isFlagEnabled('quartzSession')) {\n await fetchIdentity()\n } else {\n await fetchLegacyIdentity()\n }\n\n setHasValidSession(true)\n } catch {\n setHasValidSession(false)\n }\n }, [])\n\n useEffect(() => {\n getSessionValidity()\n }, [getSessionValidity])\n\n const history = useHistory()\n\n if (hasValidSession) {\n if (history.length <= EMPTY_HISTORY_STACK_LENGTH) {\n // If the user directly navigates to the login page after having a session but no stack\n history.push('/')\n } else {\n history.goBack()\n }\n return null\n } else {\n if (isFlagEnabled('universalLogin')) {\n if (CLOUD) {\n const url = new URL(`${CLOUD_QUARTZ_URL}`).href\n\n console.warn('Redirect to cloud url: ', url)\n window.location.replace(url)\n return\n }\n }\n }\n\n return (\n \n \n \n }>\n \n Log in to your InfluxDB Account\n \n \n \n \n \n )\n}\n","// Libraries\nimport React, {FC, useEffect} from 'react'\nimport {connect} from 'react-redux'\nimport {RouteComponentProps} from 'react-router-dom'\n\n// Types\nimport {AppState, Organization, ResourceType} from 'src/types'\n\n// Selectors\nimport {getAll} from 'src/resources/selectors'\nimport {getOrg} from 'src/organizations/selectors'\n\ninterface StateProps {\n orgs: Organization[]\n org: {id?: string}\n}\n\ntype Props = StateProps & RouteComponentProps\n\nconst RouteToOrg: FC = ({orgs, history, org}) => {\n useEffect(() => {\n if (!orgs || !orgs.length) {\n history.push(`/no-orgs`)\n return\n }\n\n // org from local storage\n if (org && org.id) {\n history.push(`/orgs/${org.id}`)\n return\n }\n\n // else default to first org\n history.push(`/orgs/${orgs[0].id}`)\n }, [orgs, org])\n\n return <>\n}\n\nconst mstp = (state: AppState) => {\n const org = getOrg(state)\n const orgs = getAll(state, ResourceType.Orgs)\n\n return {orgs, org}\n}\n\nexport default connect(mstp)(RouteToOrg)\n","// Libraries\nimport React, {useEffect, FunctionComponent, lazy, Suspense} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {Route, Switch} from 'react-router-dom'\nimport {identify} from 'rudder-sdk-js'\n\n// Components\nimport PageSpinner from 'src/perf/components/PageSpinner'\nimport {CheckoutPage, OperatorPage} from 'src/shared/containers'\nconst NoOrgsPage = lazy(() => import('src/organizations/containers/NoOrgsPage'))\nconst NotebookTemplates = lazy(\n () => import('src/flows/components/FromTemplatePage')\n)\nconst App = lazy(() => import('src/App'))\nconst NotFound = lazy(() => import('src/shared/components/NotFound'))\n\n// Actions\nimport {getOrganizations} from 'src/organizations/actions/thunks'\nimport RouteToOrg from 'src/shared/containers/RouteToOrg'\n\n// Selectors\nimport {getAllOrgs} from 'src/resources/selectors'\nimport {getMe, getQuartzMe, getQuartzMeStatus} from 'src/me/selectors'\nimport {\n selectQuartzIdentity,\n selectQuartzIdentityStatus,\n} from 'src/identity/selectors'\n\n// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Utils\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {convertStringToEpoch} from 'src/shared/utils/dateTimeUtils'\nimport {shouldUseQuartzIdentity} from 'src/identity/utils/shouldUseQuartzIdentity'\nimport {updateReportingContext} from 'src/cloud/utils/reporting'\n\n// Types\nimport {Me} from 'src/client/unityRoutes'\nimport {PROJECT_NAME} from 'src/flows'\nimport {RemoteDataState} from 'src/types'\n\n// Thunks\nimport {\n getCurrentOrgDetailsThunk,\n getQuartzIdentityThunk,\n} from 'src/identity/actions/thunks'\n\nconst canAccessCheckout = (me: Me): boolean => {\n if (!!me?.isRegionBeta) {\n return false\n }\n return me?.accountType !== 'pay_as_you_go' && me?.accountType !== 'contract'\n}\n\nconst GetOrganizations: FunctionComponent = () => {\n const {status, org} = useSelector(getAllOrgs)\n const identity = useSelector(selectQuartzIdentity)\n const quartzMeStatus = useSelector(getQuartzMeStatus)\n const quartzMe = useSelector(getQuartzMe)\n const quartzIdentityStatus = useSelector(selectQuartzIdentityStatus)\n const {id: meId = '', name: email = ''} = useSelector(getMe)\n const {account} = identity.currentIdentity\n\n const dispatch = useDispatch()\n\n const identityOrgId = identity.currentIdentity.org.id\n\n useEffect(() => {\n if (identityOrgId && shouldUseQuartzIdentity() && !quartzMe?.isRegionBeta) {\n dispatch(getCurrentOrgDetailsThunk(identityOrgId))\n }\n }, [identityOrgId]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // This doesn't require another API call.\n useEffect(() => {\n if (status === RemoteDataState.NotStarted) {\n dispatch(getOrganizations())\n }\n }, [dispatch, status]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (\n CLOUD &&\n email &&\n org?.id &&\n account?.id &&\n account?.name &&\n isFlagEnabled('rudderstackReporting')\n ) {\n identify(meId, {\n email,\n orgID: org.id,\n accountID: account.id,\n accountName: account.name,\n })\n }\n }, [meId, email, org?.id, account?.id, account?.name])\n\n useEffect(() => {\n if (\n CLOUD &&\n quartzMeStatus === RemoteDataState.NotStarted &&\n quartzIdentityStatus === RemoteDataState.NotStarted\n ) {\n dispatch(getQuartzIdentityThunk())\n }\n }, [quartzMeStatus, quartzIdentityStatus]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // This doesn't require another API call.\n useEffect(() => {\n if (\n isFlagEnabled('credit250Experiment') &&\n quartzMeStatus === RemoteDataState.Done &&\n status === RemoteDataState.Done\n ) {\n const {\n accountType: account_type,\n accountCreatedAt: account_created_at = '',\n } = quartzMe\n const orgId = org?.id ?? ''\n window.dataLayer = window.dataLayer ?? []\n window.dataLayer.push({\n identity: {\n account_type,\n account_created_at: convertStringToEpoch(account_created_at),\n id: meId,\n email,\n organization_id: orgId,\n },\n })\n }\n }, [quartzMeStatus, status]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const isRegionBeta = quartzMe?.isRegionBeta ?? false\n const accountType = quartzMe?.accountType ?? 'free'\n\n useEffect(() => {\n if (CLOUD) {\n updateReportingContext({\n 'org (hide_upgrade_cta)': `${accountType === 'free' && !isRegionBeta}`,\n 'org (account_type)': accountType,\n })\n }\n }, [accountType, isRegionBeta])\n\n return (\n \n }>\n {CLOUD ? (\n \n \n \n \n \n \n {CLOUD && canAccessCheckout(quartzMe) && (\n \n )}\n {CLOUD && quartzMe?.isOperator && (\n \n )}\n \n \n \n ) : (\n \n \n \n \n \n \n \n )}\n \n \n )\n}\n\nexport default GetOrganizations\n","import {Dispatch} from 'redux'\nimport {getFlags as getFlagsRequest} from 'src/client'\nimport {FlagMap} from 'src/shared/actions/flags'\nimport {RemoteDataState} from 'src/types'\nimport {Actions, setFlags, setPublicFlags} from 'src/shared/actions/flags'\nimport {CLOUD} from 'src/shared/constants'\n\nlet getCloudPublicFlags = null\n\nif (CLOUD) {\n getCloudPublicFlags = require('src/client/cloudPrivRoutes').getFlags\n}\n\nexport const getFlags =\n () =>\n async (dispatch: Dispatch): Promise => {\n try {\n dispatch(setFlags(RemoteDataState.Loading))\n const resp = await getFlagsRequest({})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n dispatch(setFlags(RemoteDataState.Done, resp.data))\n\n return resp.data\n } catch (error) {\n console.error(error)\n dispatch(setFlags(RemoteDataState.Error, null))\n }\n }\n\nexport const getPublicFlags = () => async (dispatch: Dispatch) => {\n if (!CLOUD) {\n return\n }\n const resp = await getCloudPublicFlags({})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n dispatch(setPublicFlags(resp.data))\n}\n","// Libraries\nimport React, {useEffect, FC} from 'react'\nimport {useSelector, useDispatch} from 'react-redux'\nimport {Switch, Route} from 'react-router-dom'\nimport GetOrganizations from 'src/shared/containers/GetOrganizations'\n\n// Components\nimport {SpinnerContainer, TechnoSpinner} from '@influxdata/clockface'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\n// Actions\nimport {getFlags} from 'src/shared/thunks/flags'\n\n// Utils\nimport {activeFlags, getFlagStatus} from 'src/shared/selectors/flags'\nimport {updateReportingContext} from 'src/cloud/utils/reporting'\n\nconst GetFlags: FC = () => {\n const dispatch = useDispatch()\n const flags = useSelector(activeFlags)\n const status = useSelector(getFlagStatus)\n\n useEffect(() => {\n if (status === RemoteDataState.NotStarted) {\n dispatch(getFlags())\n }\n }, [dispatch, status])\n\n useEffect(() => {\n updateReportingContext(\n Object.entries(flags).reduce((prev, [key, val]) => {\n prev[`flag (${key})`] = val\n\n return prev\n }, {})\n )\n }, [flags])\n\n return (\n }>\n \n \n \n \n )\n}\n\nexport default GetFlags\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport {Switch, Route} from 'react-router-dom'\nimport {connect, ConnectedProps} from 'react-redux'\n\n// Components\nimport {SpinnerContainer, TechnoSpinner} from '@influxdata/clockface'\nimport GetFlags from 'src/shared/containers/GetFlags'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\n// Actions\nimport {getIdpeMeThunk} from 'src/me/actions/thunks'\n\n// Decorators\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\ninterface State {\n loading: RemoteDataState\n}\n\ntype ReduxProps = ConnectedProps\ntype Props = ReduxProps\n\n@ErrorHandling\nclass GetMe extends PureComponent {\n constructor(props: Props) {\n super(props)\n\n this.state = {\n loading: RemoteDataState.NotStarted,\n }\n }\n\n public render() {\n const {loading} = this.state\n\n return (\n }>\n \n \n \n \n )\n }\n\n public componentDidMount() {\n this.props.getIdpeMeThunk()\n this.setState({loading: RemoteDataState.Done})\n }\n}\n\nconst mdtp = {\n getIdpeMeThunk,\n}\n\nconst connector = connect(null, mdtp)\n\nexport default connector(GetMe)\n","// Libraries\nimport React, {ReactElement, PureComponent} from 'react'\nimport {Switch, Route, RouteComponentProps} from 'react-router-dom'\nimport {connect, ConnectedProps} from 'react-redux'\n\n// Components\nimport {ErrorHandling} from 'src/shared/decorators/errors'\nimport {SpinnerContainer, TechnoSpinner} from '@influxdata/clockface'\nimport GetMe from 'src/shared/containers/GetMe'\n\n// Utils\nimport {\n getFromLocalStorage,\n removeFromLocalStorage,\n setToLocalStorage,\n} from 'src/localStorage'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {getPublicFlags} from 'src/shared/thunks/flags'\n\n// Actions\nimport {notify as notifyAction} from 'src/shared/actions/notifications'\n\n// Constants\nimport {sessionTimedOut} from 'src/shared/copy/notifications'\nimport {\n CLOUD,\n CLOUD_LOGIN_PATHNAME,\n CLOUD_QUARTZ_URL,\n} from 'src/shared/constants'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\n// APIs\nimport {fetchIdentity, fetchLegacyIdentity} from './identity/apis/auth'\n\ninterface State {\n loading: RemoteDataState\n auth: boolean\n}\n\ninterface OwnProps {\n children: ReactElement\n}\n\ntype ReduxProps = ConnectedProps\ntype Props = OwnProps & RouteComponentProps & ReduxProps\n\nconst FETCH_WAIT = 60000\n\n@ErrorHandling\nexport class Signin extends PureComponent {\n public state: State = {\n loading: RemoteDataState.NotStarted,\n auth: false,\n }\n\n private hasMounted = false\n private intervalID: NodeJS.Timer\n\n public async componentDidMount() {\n this.hasMounted = true\n this.setState({loading: RemoteDataState.Loading})\n if (CLOUD) {\n await this.props.onGetPublicFlags()\n }\n\n await this.checkForLogin()\n\n if (this.hasMounted) {\n this.setState({loading: RemoteDataState.Done})\n this.intervalID = setInterval(() => {\n this.checkForLogin()\n }, FETCH_WAIT)\n }\n }\n\n public componentWillUnmount() {\n clearInterval(this.intervalID)\n this.hasMounted = false\n }\n\n public render() {\n const {loading, auth} = this.state\n\n return (\n }>\n {auth && (\n \n \n \n )}\n \n )\n }\n\n private checkForLogin = async () => {\n try {\n if (isFlagEnabled('quartzSession')) {\n await fetchIdentity()\n } else {\n await fetchLegacyIdentity()\n }\n\n this.setState({auth: true})\n const redirectIsSet = !!getFromLocalStorage('redirectTo')\n if (redirectIsSet) {\n removeFromLocalStorage('redirectTo')\n }\n } catch (error) {\n this.setState({auth: false})\n const {\n location: {pathname},\n } = this.props\n\n clearInterval(this.intervalID)\n\n if (CLOUD) {\n if (\n isFlagEnabled('useQuartzLogin') &&\n process.env.NODE_ENV &&\n process.env.NODE_ENV !== 'development'\n ) {\n window.location.href = CLOUD_QUARTZ_URL\n return\n }\n\n const url = new URL(\n `${window.location.origin}${CLOUD_LOGIN_PATHNAME}?redirectTo=${window.location.href}`\n )\n setToLocalStorage('redirectTo', window.location.href)\n window.location.href = url.href\n throw error\n }\n\n if (pathname.startsWith('/signin')) {\n return\n }\n\n let returnTo = ''\n\n if (pathname !== '/') {\n returnTo = `?returnTo=${pathname}`\n this.props.notify(sessionTimedOut())\n }\n\n this.props.history.replace(`/signin${returnTo}`)\n }\n }\n}\n\nconst mdtp = {\n notify: notifyAction,\n onGetPublicFlags: getPublicFlags,\n}\n\nconst connector = connect(null, mdtp)\n\nexport default connector(Signin)\n","export const isOnboardingURL = () => {\n return !!window.location.pathname.match(/\\/onboarding/)\n}\n","// Libraries\nimport React, {ReactElement, PureComponent, Suspense, lazy} from 'react'\nimport {Switch, Route, RouteComponentProps} from 'react-router-dom'\n\n// APIs\nimport {getSetup} from 'src/client'\n\n// Components\nimport {ErrorHandling} from 'src/shared/decorators/errors'\nimport PageSpinner from 'src/perf/components/PageSpinner'\nimport {LoginPage} from 'src/onboarding/containers/LoginPage'\n// lazy loading the signin component causes wasm issues\nimport Signin from 'src/Signin'\n\nconst OnboardingWizardPage = lazy(\n () => import('src/onboarding/containers/OnboardingWizardPage')\n)\nconst SigninPage = lazy(() => import('src/onboarding/containers/SigninPage'))\nconst Logout = lazy(() => import('src/Logout'))\nconst ReadOnlyNotebook = lazy(() => import('src/flows/components/ReadOnly'))\n\n// Constants\nimport {LOGIN, SIGNIN, LOGOUT} from 'src/shared/constants/routes'\n\n// Utils\nimport {isOnboardingURL} from 'src/onboarding/utils'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\ninterface State {\n loading: RemoteDataState\n allowed: boolean\n}\n\ninterface OwnProps {\n children: ReactElement\n}\n\ntype Props = RouteComponentProps & OwnProps\n\n@ErrorHandling\nexport class Setup extends PureComponent {\n constructor(props: Props) {\n super(props)\n\n this.state = {\n loading: RemoteDataState.NotStarted,\n allowed: false,\n }\n }\n\n public async componentDidMount() {\n const {history} = this.props\n\n if (isOnboardingURL()) {\n this.setState({\n loading: RemoteDataState.Done,\n })\n return\n }\n\n const resp = await getSetup({})\n\n if (resp.status !== 200) {\n throw new Error('There was an error onboarding')\n }\n\n const {allowed} = resp.data\n\n this.setState({\n loading: RemoteDataState.Done,\n allowed,\n })\n\n if (!allowed) {\n return\n }\n\n history.push('/onboarding/0')\n }\n\n async componentDidUpdate(prevProps: Props, prevState: State) {\n if (!prevState.allowed) {\n return\n }\n\n if (prevProps.location.pathname.includes('/onboarding/2')) {\n this.setState({loading: RemoteDataState.Loading})\n const resp = await getSetup({})\n\n if (resp.status !== 200) {\n throw new Error('There was an error onboarding')\n }\n\n const {allowed} = resp.data\n this.setState({allowed, loading: RemoteDataState.Done})\n }\n }\n\n public render() {\n const {loading, allowed} = this.state\n\n return (\n \n }>\n {allowed && (\n \n )}\n {!allowed && (\n \n \n \n \n \n \n \n \n )}\n \n \n )\n }\n}\n\nexport default Setup\n","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./chronograf.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import 'babel-polyfill'\nimport 'abortcontroller-polyfill/dist/polyfill-patch-fetch'\n\n// Libraries\nimport React, {PureComponent, Suspense} from 'react'\nimport {render} from 'react-dom'\nimport {Provider} from 'react-redux'\nimport {Route} from 'react-router-dom'\nimport {ConnectedRouter} from 'connected-react-router'\n\n// Stores\nimport {getStore} from 'src/store/configureStore'\nimport {history} from 'src/store/history'\n\n// Components\nimport Setup from 'src/Setup'\nimport PageSpinner from 'src/perf/components/PageSpinner'\n\n// Utilities\nimport {getRootNode} from 'src/utils/nodes'\nimport {\n updateReportingContext,\n updateCampaignInfo,\n} from 'src/cloud/utils/reporting'\n\n// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Actions\nimport {disablePresentationMode} from 'src/shared/actions/app'\n\n// Styles\nimport 'src/style/chronograf.scss'\nimport '@influxdata/clockface/dist/index.css'\nimport '@docsearch/css'\nconst rootNode = getRootNode()\n\nconst SESSION_KEY = 'session'\n\nconst cookieSession = document.cookie.match(\n new RegExp('(^| )' + SESSION_KEY + '=([^;]+)')\n)\n\nupdateReportingContext({\n session: cookieSession ? cookieSession[2].slice(5) : '',\n})\n\nif (CLOUD) {\n updateCampaignInfo(window.location.search)\n}\n\nconst {dispatch} = getStore()\n\nif (window['Cypress']) {\n window['store'] = getStore()\n}\n\nhistory.listen(() => {\n dispatch(disablePresentationMode())\n})\n\ndeclare global {\n interface Window {\n basepath: string\n dataLayer: any[]\n userpilot: any\n }\n}\n\nwindow.addEventListener('keyup', event => {\n const escapeKeyCode = 27\n // fallback for browsers that don't support event.key\n if (event.key === 'Escape' || event.keyCode === escapeKeyCode) {\n dispatch(disablePresentationMode())\n }\n})\n\nclass Root extends PureComponent {\n public render() {\n return (\n \n \n }>\n \n \n \n \n )\n }\n}\n\nif (rootNode) {\n render(, rootNode)\n}\n","import {SelectableDurationTimeRange} from 'src/types'\n\nexport const TIME_RANGE_FORMAT = 'YYYY-MM-DD HH:mm'\n\nexport const CUSTOM_TIME_RANGE_LABEL =\n 'Custom Time Range' as 'Custom Time Range'\n\nexport const pastHourTimeRange: SelectableDurationTimeRange = {\n seconds: 3600,\n lower: 'now() - 1h',\n upper: null,\n label: 'Past 1h',\n duration: '1h',\n type: 'selectable-duration',\n windowPeriod: 10000, // 10s\n}\n\nexport const pastThirtyDaysTimeRange: SelectableDurationTimeRange = {\n seconds: 2592000,\n lower: 'now() - 30d',\n upper: null,\n label: 'Past 30d',\n duration: '30d',\n type: 'selectable-duration',\n windowPeriod: 3600000, // 1h\n}\n\nexport const pastFifteenMinTimeRange: SelectableDurationTimeRange = {\n seconds: 900,\n lower: 'now() - 15m',\n upper: null,\n label: 'Past 15m',\n duration: '15m',\n type: 'selectable-duration',\n windowPeriod: 10000, // 10s\n}\n\nexport const pastDayTimeRange: SelectableDurationTimeRange = {\n seconds: 86400,\n lower: 'now() - 24h',\n upper: null,\n label: 'Past 24h',\n duration: '24h',\n type: 'selectable-duration',\n windowPeriod: 240000, // 4m\n}\n\nexport const CUSTOM_TIME_RANGE: {label: string; type: 'custom'} = {\n label: 'Custom Time Range' as 'Custom Time Range',\n type: 'custom',\n}\n\nexport const SELECTABLE_TIME_RANGES: SelectableDurationTimeRange[] = [\n {\n seconds: 60,\n lower: 'now() - 1m',\n upper: null,\n label: 'Past 1m',\n duration: '1m',\n type: 'selectable-duration',\n windowPeriod: 1000, // 1s\n },\n {\n seconds: 300,\n lower: 'now() - 5m',\n upper: null,\n label: 'Past 5m',\n duration: '5m',\n type: 'selectable-duration',\n windowPeriod: 10000, // 10s\n },\n pastFifteenMinTimeRange,\n pastHourTimeRange,\n {\n seconds: 10800,\n lower: 'now() - 3h',\n upper: null,\n label: 'Past 3h',\n duration: '3h',\n type: 'selectable-duration',\n windowPeriod: 60000, // 1m\n },\n {\n seconds: 21600,\n lower: 'now() - 6h',\n upper: null,\n label: 'Past 6h',\n duration: '6h',\n type: 'selectable-duration',\n windowPeriod: 60000, // 1m\n },\n {\n seconds: 43200,\n lower: 'now() - 12h',\n upper: null,\n label: 'Past 12h',\n duration: '12h',\n type: 'selectable-duration',\n windowPeriod: 120000, // 2m\n },\n pastDayTimeRange,\n {\n seconds: 172800,\n lower: 'now() - 2d',\n upper: null,\n label: 'Past 2d',\n duration: '2d',\n type: 'selectable-duration',\n windowPeriod: 600000, // 10m\n },\n {\n seconds: 604800,\n lower: 'now() - 7d',\n upper: null,\n label: 'Past 7d',\n duration: '7d',\n type: 'selectable-duration',\n windowPeriod: 1800000, // 30 min\n },\n pastThirtyDaysTimeRange,\n]\n\nexport const SELECTABLE_USAGE_TIME_RANGES: SelectableDurationTimeRange[] = [\n pastDayTimeRange,\n {\n seconds: 604800,\n lower: 'now() - 7d',\n upper: null,\n label: 'Past 7d',\n duration: '7d',\n type: 'selectable-duration',\n windowPeriod: 1800000, // 30 min\n },\n pastThirtyDaysTimeRange,\n]\n\nexport const DEFAULT_USAGE_TIME_RANGE = pastDayTimeRange\nexport const DEFAULT_TIME_RANGE = pastHourTimeRange\n","export const resolveSelectedKey = (\n values: string[],\n prevSelection?: string,\n defaultSelection?: string\n): string => {\n if (values.includes(prevSelection)) {\n return prevSelection\n }\n\n if (values.includes(defaultSelection)) {\n return defaultSelection\n }\n\n return values[0]\n}\n\nexport const resolveSelectedValue = (\n values: string[],\n selectedKey: string,\n defaultSelection?: string\n): string => {\n if (values && Array.isArray(values)) {\n if (values.includes(selectedKey)) {\n return selectedKey\n }\n\n if (values.includes(defaultSelection)) {\n return defaultSelection\n }\n\n return values[0]\n }\n if (selectedKey in values) {\n return values[selectedKey]\n }\n\n if (defaultSelection in values) {\n return values[defaultSelection]\n }\n // return get first value\n const first = Object.keys(values)[0]\n return values[first]\n}\n","// APIs\nimport {runQuery} from 'src/shared/apis/query'\nimport {fromFlux} from '@influxdata/giraffe'\n\n// Utils\nimport {resolveSelectedKey} from 'src/variables/utils/resolveSelectedValue'\nimport {formatVarsOption} from 'src/variables/utils/formatVarsOption'\nimport {buildUsedVarsOption} from 'src/variables/utils/buildVarsOption'\nimport {event} from 'src/cloud/utils/reporting'\n\n// Types\nimport {\n VariableAssignment,\n VariableValues,\n FluxColumnType,\n Variable,\n} from 'src/types'\nimport {CancelBox} from 'src/types/promises'\n\nconst cacheKey = (\n url: string,\n orgID: string,\n query: string,\n variables: Variable[] | VariableAssignment[]\n): string => {\n return `${query}\\n\\n${formatVarsOption(variables)}\\n\\n${orgID}\\n\\n${url}`\n}\n\n/*\n Given the CSV response for a Flux query, get the set of values from the first\n `_value` column in the response, as well as the column type of these values\n and a choice of selected value.\n\n The selected value must exist in the returned values for the response. We\n will first try to use the `prevSelection`, then the `defaultSelection`,\n before finally falling back to the first value returned in the response.\n*/\nexport const extractValues = (\n csv: string,\n prevSelection?: string,\n defaultSelection?: string\n): VariableValues => {\n const {table} = fromFlux(csv)\n if (!table || !table.getColumn('_value', 'string')) {\n return {\n values: [],\n valueType: 'string',\n selected: [],\n }\n }\n let values = table.getColumn('_value', 'string') || []\n values = [...new Set(values)]\n values.sort()\n\n return {\n values,\n valueType: table.getColumnType('_value') as FluxColumnType,\n selected: [resolveSelectedKey(values, prevSelection, defaultSelection)],\n }\n}\n\nexport interface ValueFetcher {\n fetch: (\n url: string,\n orgID: string,\n query: string,\n variables: Variable[] | VariableAssignment[],\n prevSelection: string,\n defaultSelection: string,\n skipCache: boolean,\n controller?: AbortController\n ) => CancelBox\n}\n\nexport class DefaultValueFetcher implements ValueFetcher {\n private cache: {[cacheKey: string]: VariableValues} = {}\n\n public fetch(\n url,\n orgID,\n query,\n variables,\n prevSelection,\n defaultSelection,\n skipCache,\n abortController\n ) {\n const key = cacheKey(url, orgID, query, variables)\n\n if (!skipCache) {\n const cachedValues = this.cachedValues(\n key,\n prevSelection,\n defaultSelection\n )\n\n if (cachedValues) {\n return {promise: Promise.resolve(cachedValues), cancel: () => {}}\n }\n }\n\n const extern = buildUsedVarsOption(query, variables)\n const request = runQuery(orgID, query, extern, abortController)\n event('runQuery', {context: 'variables'})\n\n const promise = request.promise.then(result => {\n if (result.type !== 'SUCCESS') {\n return Promise.reject(result.message)\n }\n\n const values = extractValues(result.csv, prevSelection, defaultSelection)\n\n this.cache[key] = values\n\n return values\n })\n\n return {\n promise,\n cancel: request.cancel,\n }\n }\n\n private cachedValues(\n key: string,\n prevSelection: string,\n defaultSelection: string\n ): VariableValues {\n const cachedValues = this.cache[key]\n\n if (!cachedValues) {\n return null\n }\n\n return {\n ...cachedValues,\n selected: [\n resolveSelectedKey(\n cachedValues.values as string[],\n prevSelection,\n defaultSelection\n ),\n ],\n }\n }\n}\n\nexport const valueFetcher = new DefaultValueFetcher()\n","class Deferred {\n public promise: Promise\n public resolve: (...rest: T[]) => void\n public reject: (error: Error) => void\n\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve\n this.reject = reject\n })\n }\n}\n\nexport default Deferred\n","// Utils\nimport {valueFetcher, ValueFetcher} from 'src/variables/utils/ValueFetcher'\nimport Deferred from 'src/utils/Deferred'\nimport {parseASTIM} from 'src/variables/utils/astim'\n\n// Selectors\n\n// Constants\nimport {OPTION_NAME, BOUNDARY_GROUP} from 'src/variables/constants/index'\n\n// Types\nimport {\n RemoteDataState,\n Variable,\n VariableValues,\n ValueSelections,\n} from 'src/types'\nimport {CancelBox, CancellationError} from 'src/types/promises'\n\nexport interface VariableNode {\n variable: Variable\n values: VariableValues\n parents: VariableNode[]\n children: VariableNode[]\n status: RemoteDataState\n cancel: () => void\n}\n\ninterface HydrateVarsOptions {\n url: string\n orgID: string\n selections?: ValueSelections\n fetcher?: ValueFetcher\n skipCache?: boolean\n controller?: AbortController\n}\n\nexport interface EventedCancelBox extends CancelBox {\n on?: any\n}\n\nexport const createVariableGraph = (\n allVariables: Variable[]\n): VariableNode[] => {\n const nodesByID: {[variableID: string]: VariableNode} = allVariables.reduce(\n (prev, curr) => {\n let status = RemoteDataState.Done\n if (curr.arguments.type === 'query') {\n status = RemoteDataState.NotStarted\n }\n prev[curr.id] = {\n variable: curr,\n values: null,\n parents: [],\n children: [],\n status,\n cancel: () => {},\n }\n return prev\n },\n {}\n )\n\n // Then initialize all the edges (the `parents` and `children` references)\n Object.keys(nodesByID)\n .filter(k => nodesByID[k].variable.arguments.type === 'query')\n .forEach(k => {\n getVarChildren(nodesByID[k].variable, allVariables)\n .map(child => child.id)\n .forEach(c => {\n nodesByID[k].children.push(nodesByID[c])\n nodesByID[c].parents.push(nodesByID[k])\n })\n })\n\n return Object.values(nodesByID)\n}\n\nexport const isInQuery = (query: string, v: Variable): boolean => {\n const regexp = new RegExp(\n `${BOUNDARY_GROUP}${OPTION_NAME}.${v.name}${BOUNDARY_GROUP}`\n )\n\n return regexp.test(query)\n}\n\nconst getVarChildren = (\n {\n arguments: {\n values: {query},\n },\n }: Variable,\n allVariables: Variable[]\n) => {\n const astim = parseASTIM(query)\n\n return allVariables.filter(maybeChild => {\n return astim.hasVariable(maybeChild.name)\n })\n}\n\n/*\n Collect all ancestors of a node.\n\n A node `a` is an ancestor of `b` if there exists a path from `a` to `b`.\n\n This function is safe to call on a node within a graph with cycles.\n*/\nconst collectAncestors = (\n node: VariableNode,\n acc: Set = new Set()\n): VariableNode[] => {\n for (const parent of node.parents) {\n if (!acc.has(parent)) {\n acc.add(parent)\n collectAncestors(parent, acc)\n }\n }\n\n return [...acc]\n}\n\n/*\n Filters out any parents that have already been referenced in a previous node\n\n A node `a` & `c` are children of `b` if there exists a path:\n\n b\n / \\\n a c\n\n This function safely filters out a duplicate reference to the parent `b`\n When both `a` and `c` are passed as variables to be hydrated, since `b` should\n already be `hydrated` by the first variable that is passed in.\n*/\nexport interface DeduplicatedRoot {\n node: VariableNode\n subsetIDs: {[key: string]: boolean}\n}\n\nexport const findSubgraph = (\n graph: VariableNode[],\n variables: Variable[]\n): VariableNode[] => {\n const subgraph: Set = new Set()\n // use an ID array to reduce the chance of reference errors\n const varIDs = variables.map(v => v.id)\n for (const node of graph) {\n const shouldKeep =\n varIDs.includes(node.variable.id) ||\n collectAncestors(node).some(ancestor =>\n varIDs.includes(ancestor.variable.id)\n )\n\n if (shouldKeep) {\n subgraph.add(node)\n }\n }\n\n for (const node of subgraph) {\n node.parents = node.parents.filter(node => subgraph.has(node))\n node.children = node.children.filter(node => subgraph.has(node))\n }\n return [...subgraph]\n}\n\n/*\n Get the `VariableValues` for a variable that cannot be successfully hydrated.\n*/\nconst errorVariableValues = (\n message = 'Failed to load values for variable'\n): VariableValues => ({\n values: null,\n selected: null,\n valueType: null,\n error: message,\n})\n\n/*\n Find all the descendants of a node.\n\n A node `b` is a descendant of `a` if there exists a path from `a` to `b`.\n\n Checks visited to prevent looping forever\n*/\nexport const collectDescendants = (\n node: VariableNode,\n acc: Set = new Set()\n): VariableNode[] => {\n for (const child of node.children) {\n if (!acc.has(child)) {\n acc.add(child)\n collectDescendants(child, acc)\n }\n }\n\n return [...acc]\n}\n\n/*\n Hydrate the values of a single node in the graph.\n\n This assumes that every descendant of this node has already been hydrated.\n*/\n// TODO: figure out how to type the `on` function\nconst hydrateVarsHelper = async (\n node: VariableNode,\n options: HydrateVarsOptions,\n on?: any\n): Promise => {\n const variableType = node.variable.arguments.type\n\n // this assumes that the variable hydration is done in the selector 'getVariable'\n if (variableType === 'map') {\n return {\n valueType: 'string',\n values: node.variable.arguments.values,\n selected: node.variable.selected,\n }\n }\n\n if (variableType === 'constant') {\n return {\n valueType: 'string',\n values: node.variable.arguments.values,\n selected: node.variable.selected,\n }\n }\n\n if (variableType === 'system') {\n return {\n valueType: 'string',\n values: node.variable.arguments.values,\n selected: node.variable.selected,\n }\n }\n\n if (node.status !== RemoteDataState.Loading) {\n node.status = RemoteDataState.Loading\n on.fire('status', node.variable, node.status)\n collectAncestors(node)\n .filter(parent => parent.variable.arguments.type === 'query')\n .forEach(parent => {\n if (parent.status !== RemoteDataState.Loading) {\n parent.status = RemoteDataState.Loading\n on.fire('status', parent.variable, parent.status)\n }\n })\n }\n\n const descendants = collectDescendants(node).map(node => node.variable)\n\n const {url, orgID} = options\n const {query} = node.variable.arguments.values\n const fetcher = options.fetcher || valueFetcher\n\n const request = fetcher.fetch(\n url,\n orgID,\n query,\n descendants,\n null,\n '',\n options.skipCache,\n options.controller\n )\n\n node.cancel = request.cancel\n\n const values = await request.promise\n\n // NOTE: do not fire `done` event here, as the value\n // has not been properly hydrated yet\n node.status = RemoteDataState.Done\n return values\n}\n\n/*\n Check if a node is `NotStarted` and if every child of the node has been\n resolved (successfully or not).\n*/\nconst readyToResolve = (parent: VariableNode): boolean =>\n parent.children.every(child => child.status === RemoteDataState.Done)\n\n/*\n Find all `NotStarted` nodes in the graph that have no children.\n*/\nconst findLeaves = (graph: VariableNode[]): VariableNode[] =>\n graph.filter(node => node.children.length === 0)\n\n/*\n Given a node, attempt to find a cycle that the node is a part of. If no cycle\n is found, return `null`.\n*/\nconst findCyclicPath = (node: VariableNode): VariableNode[] => {\n try {\n findCyclicPathHelper(node, [], {})\n } catch (cyclicPath) {\n return cyclicPath\n }\n\n return null\n}\n\nconst findCyclicPathHelper = (\n node: VariableNode,\n seen: VariableNode[],\n cache: {[key: string]: undefined | boolean} = {}\n): void => {\n if (cache[node.variable.id]) {\n throw seen\n }\n\n for (const child of node.children) {\n findCyclicPathHelper(child, [...seen, node], {\n ...cache,\n [node.variable.id]: true,\n })\n }\n}\n\n/*\n Find all cycles within the variable graph and mark every node within a cycle\n as errored (we cannot resolve cycles).\n*/\nconst invalidateCycles = (graph: VariableNode[]): void => {\n for (const node of graph) {\n const cyclicPath = findCyclicPath(node)\n\n if (cyclicPath) {\n for (const invalidNode of cyclicPath) {\n invalidNode.status = RemoteDataState.Error\n }\n }\n }\n}\n\n/*\n Given a node, mark all ancestors of that node as `Error`.\n*/\nconst invalidateAncestors = (node: VariableNode, e: Error, on: any): void => {\n const ancestors = collectAncestors(node)\n\n for (const ancestor of ancestors) {\n ancestor.status = RemoteDataState.Error\n on.fire('error', ancestor.variable, e)\n\n if (ancestor.variable.arguments.type === 'query') {\n ancestor.variable.arguments.values.results = []\n }\n }\n}\n\nconst extractResult = (graph: VariableNode[]): Variable[] => {\n const result = {}\n\n for (const node of graph) {\n if (node.status === RemoteDataState.Error) {\n node.values = errorVariableValues()\n }\n\n result[node.variable.id] = node.variable\n }\n\n return Object.values(result)\n}\n\n/*\n Given a list of `variables`, execute their queries to retrieve the possible\n values for each variable.\n\n Since variables can make use of other variables, this process is more\n complicated then simply executing every query found in a variable. Instead,\n we:\n\n 1. Construct a graph that represents the dependency structure between\n variables. A variable `a` depends on variable `b` if the query for `a`\n uses the variable `b`.\n\n Each node in the graph has a hydration status: it it either `NotStarted`,\n `Loading` (values are being fetched), `Error` (values failed to fetch or\n cannot be fetched), or `Done` (values have been fetched successfully).\n When the graph is constructed, all nodes a marked as `NotStarted`.\n\n 2. Find all cycles in the graph and mark nodes within a cycle and nodes that\n lead to a cycle as `Error`. We cannot resolve variables with cyclical\n dependencies.\n\n 3. Find the leaves of the graph (the nodes with no dependencies) and begin to\n load their values.\n\n a. If loading the values succeeds, we mark that node as `Done` and check\n if every child of the parent of this node is `Done`. If this is the\n case, we start loading the parent.\n\n b. If loading the values fails, we mark that node and every one of its\n ancestors as as `Error`.\n\n c. If the parent node is `Error`, we stop resolving along this path. Steps\n 2 and 3b guarantee that every ancestor of this `Error` node is also\n `Error`.\n\n 4. By the time all node resolution has succeeded or failed, every node in the\n graph has now either been resolved with values or marked with `Error`.\n\n*/\nexport const hydrateVars = (\n variables: Variable[],\n allVariables: Variable[],\n options: HydrateVarsOptions\n): EventedCancelBox => {\n const graph = findSubgraph(\n createVariableGraph(allVariables),\n variables\n ).filter(n => n.variable.arguments.type !== 'system')\n invalidateCycles(graph)\n\n let isCancelled = false\n\n const resolve = async (node: VariableNode) => {\n if (isCancelled) {\n return\n }\n try {\n // TODO: terminate the concept of node.values at the fetcher and just use variables\n node.values = await hydrateVarsHelper(node, options, on)\n\n if (node.variable.arguments.type === 'query') {\n node.variable.arguments.values.results = node.values.values as string[]\n } else {\n node.variable.arguments.values = node.values.values\n }\n\n node.variable.selected = node.variable.selected || []\n\n // ensure that the selected value defaults propegate for\n // nested queryies.\n if (\n node.variable.arguments.type === 'query' ||\n node.variable.arguments.type === 'constant'\n ) {\n if (\n !(node.values.values as string[]).includes(node.variable.selected[0])\n ) {\n node.variable.selected = []\n }\n } else if (node.variable.arguments.type === 'map') {\n if (\n !Object.keys(node.values.values).includes(node.variable.selected[0])\n ) {\n node.variable.selected = []\n }\n }\n\n if (!node.variable.selected || !node.variable.selected[0]) {\n node.variable.selected = node.values.selected\n }\n\n on.fire('status', node.variable, node.status)\n\n return Promise.all(node.parents.filter(readyToResolve).map(resolve))\n } catch (e) {\n if (e.name === 'CancellationError') {\n return\n }\n\n node.status = RemoteDataState.Error\n node.variable.arguments.values.results = []\n\n on.fire('error', node.variable, e)\n invalidateAncestors(node, e, on)\n }\n }\n\n const deferred = new Deferred()\n\n const cancel = () => {\n isCancelled = true\n graph.forEach(node => node.cancel())\n deferred.reject(new CancellationError())\n }\n\n const on = (function () {\n const callbacks = {}\n const ret = (evt, cb) => {\n if (!callbacks.hasOwnProperty(evt)) {\n callbacks[evt] = []\n }\n\n callbacks[evt].push(cb)\n }\n\n ret.fire = (evt, ...args) => {\n if (!callbacks.hasOwnProperty(evt)) {\n return\n }\n\n callbacks[evt].forEach(cb => cb.apply(cb, args))\n }\n\n return ret\n })()\n\n // NOTE: wrapping in a resolve disconnects the following findLeaves\n // from the main execution thread, allowing external services to\n // register listeners for the loading state changes\n Promise.resolve()\n .then(() => Promise.all(findLeaves(graph).map(resolve)))\n .then(() => {\n deferred.resolve(extractResult(graph))\n })\n\n return {promise: deferred.promise, cancel, on}\n}\n","// Libraries\nimport {normalize} from 'normalizr'\nimport {get} from 'lodash'\n\n// Actions\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n setVariables,\n setVariable,\n selectValue as selectValueInState,\n removeVariable,\n moveVariable as moveVariableInState,\n} from 'src/variables/actions/creators'\nimport {updateQueryVars} from 'src/dashboards/actions/ranges'\n\n// Schemas\nimport {variableSchema, arrayOfVariables} from 'src/schemas/variables'\n\n// APIs\nimport * as api from 'src/client'\nimport {hydrateVars} from 'src/variables/utils/hydrateVars'\nimport {createResourceFromPkgerTemplate} from 'src/templates/api'\n\n// Utils\nimport {\n getVariable as getVariableFromState,\n getVariables as getVariablesFromState,\n getAllVariables as getAllVariablesFromState,\n normalizeValues,\n getVariablesForDashboard,\n} from 'src/variables/selectors'\nimport {getOrg} from 'src/organizations/selectors'\nimport {getLabels, getStatus} from 'src/resources/selectors'\nimport {currentContext} from 'src/shared/selectors/currentContext'\nimport {event} from 'src/cloud/utils/reporting'\n\n// Constants\nimport * as copy from 'src/shared/copy/notifications'\n\n// Types\nimport {Dispatch} from 'react'\nimport {\n AppState,\n GetState,\n RemoteDataState,\n Label,\n GenVariable,\n Variable,\n VariableEntities,\n ResourceType,\n} from 'src/types'\nimport {Action as NotifyAction} from 'src/shared/actions/notifications'\nimport {\n Action as VariableAction,\n EditorAction,\n} from 'src/variables/actions/creators'\nimport {RouterAction} from 'connected-react-router'\nimport {\n filterUnusedVars,\n filterUnusedVarsBasedOnQuery,\n} from 'src/shared/utils/filterUnusedVars'\nimport {getActiveTimeMachine} from 'src/timeMachine/selectors'\nimport {getActiveQuery} from 'src/timeMachine/selectors'\nimport {getVariables as getVariablesAction} from 'src/variables/actions/thunks'\n\ntype Action = VariableAction | EditorAction | NotifyAction\n\nexport const getVariables =\n (controller?: AbortController) =>\n async (dispatch: Dispatch, getState: GetState) => {\n try {\n const state = getState()\n\n if (\n getStatus(state, ResourceType.Variables) === RemoteDataState.NotStarted\n ) {\n dispatch(setVariables(RemoteDataState.Loading))\n }\n\n const org = getOrg(state)\n const resp = await api.getVariables(\n {query: {orgID: org.id}},\n {signal: controller?.signal}\n )\n\n if (!resp) {\n return\n }\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const variables = normalize(\n resp.data.variables,\n arrayOfVariables\n )\n\n const varsByID = getVariablesFromState(state).reduce((prev, curr) => {\n prev[curr.id] = curr\n return prev\n }, {})\n\n // migrate the selected values from the existing variables into the new ones\n variables.result\n .map(k => {\n return variables.entities.variables[k]\n })\n .filter(e => {\n return varsByID.hasOwnProperty(e.id)\n })\n .forEach(v => {\n variables.entities.variables[v.id].selected = varsByID[v.id].selected\n })\n\n // Make sure all the queries are marked for update\n variables.result\n .map(k => {\n return variables.entities.variables[k]\n })\n .filter(e => {\n return e.arguments.type === 'query'\n })\n .forEach(v => {\n variables.entities.variables[v.id].status = RemoteDataState.NotStarted\n })\n\n if (!variables.entities['variables']) {\n variables.entities['variables'] = {}\n }\n\n await dispatch(setVariables(RemoteDataState.Done, variables))\n } catch (error) {\n console.error(error)\n dispatch(setVariables(RemoteDataState.Error))\n dispatch(notify(copy.getVariablesFailed()))\n }\n }\n\nconst getActiveView = (state: AppState) => {\n if (state.currentPage === 'dashboard') {\n const dashboardID = state.currentDashboard.id\n return Object.values(state.resources.views.byID).filter(\n variable => variable.dashboardID === dashboardID\n )\n }\n if (get(state, ['timeMachines', 'activeTimeMachineID']) === 'de') {\n const de = getActiveTimeMachine(state)\n return [de.view]\n }\n return []\n}\n\nexport const hydrateVariables =\n (skipCache?: boolean, controller?: AbortController) =>\n async (dispatch: Dispatch, getState: GetState) => {\n const state = getState()\n const org = getOrg(state)\n const vars = getVariablesFromState(state)\n const views = getActiveView(state)\n const activeQuery = getActiveQuery(state)\n\n let usedVars = vars\n if (views.length) {\n usedVars = filterUnusedVars(vars, views)\n } else if (activeQuery.text) {\n usedVars = filterUnusedVarsBasedOnQuery(vars, [activeQuery.text])\n }\n\n const hydration = hydrateVars(usedVars, getAllVariablesFromState(state), {\n orgID: org.id,\n url: '/api/v2/query',\n skipCache,\n controller,\n })\n\n hydration.on('status', (variable, status) => {\n if (status === RemoteDataState.Loading) {\n dispatch(setVariable(variable.id, status))\n return\n }\n if (status === RemoteDataState.Done) {\n if (variable.arguments.type === 'query') {\n variable.selected = variable.selected.filter(v =>\n variable.arguments.values?.results?.includes(v)\n )\n }\n\n const _variable = normalize(\n variable,\n variableSchema\n )\n dispatch(setVariable(variable.id, RemoteDataState.Done, _variable))\n }\n })\n\n hydration.on('error', (variable, error) => {\n dispatch(setVariable(variable.id, RemoteDataState.Error))\n dispatch(notify(copy.getVariableFailedWithMessage(variable?.name, error)))\n })\n\n await hydration.promise\n }\n\nexport const getVariable =\n (id: string) => async (dispatch: Dispatch) => {\n try {\n dispatch(setVariable(id, RemoteDataState.Loading))\n\n const resp = await api.getVariable({variableID: id})\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const variable = normalize(\n resp.data,\n variableSchema\n )\n\n dispatch(setVariable(id, RemoteDataState.Done, variable))\n } catch (error) {\n console.error(error)\n dispatch(setVariable(id, RemoteDataState.Error))\n dispatch(notify(copy.getVariableFailed()))\n }\n }\n\nexport const createVariable =\n (variable: Pick) =>\n async (dispatch: Dispatch, getState: GetState) => {\n try {\n const org = getOrg(getState())\n const resp = await api.postVariable({\n data: {\n ...variable,\n orgID: org.id,\n },\n })\n\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n\n event('variable.create.from_blank.success', {\n id: resp?.data?.id,\n name: variable?.name,\n })\n\n const createdVar = normalize(\n resp.data,\n variableSchema\n )\n\n dispatch(setVariable(resp.data.id, RemoteDataState.Done, createdVar))\n dispatch(notify(copy.createVariableSuccess(variable.name)))\n } catch (error) {\n event('variable.create.from_blank.failure', {name: variable?.name})\n console.error(error)\n dispatch(notify(copy.createVariableFailed(error.message)))\n }\n }\n\nexport const createVariableFromTemplate =\n (template: api.Template) =>\n async (dispatch: Dispatch, getState: GetState) => {\n try {\n const state = getState()\n const org = getOrg(state)\n // only one variable in the exported template so we can safely just index the 0th element\n const variableName = template[0].spec.name\n\n await createResourceFromPkgerTemplate(template, org.id)\n\n await getVariablesAction()(dispatch, getState)\n\n event('variable.create.from_template.success', {\n name: variableName,\n })\n dispatch(notify(copy.createVariableSuccess(variableName)))\n } catch (error) {\n event('variable.create.from_template.failure', {\n template: template[0].metadata.name,\n })\n console.error(error)\n dispatch(notify(copy.createVariableFailed(error.message)))\n }\n }\n\nexport const updateVariable =\n (id: string, props: Variable) =>\n async (dispatch: Dispatch, getState: GetState) => {\n try {\n dispatch(setVariable(id, RemoteDataState.Loading))\n\n const state = getState()\n const labels = getLabels(state, props.labels)\n\n const resp = await api.patchVariable({\n variableID: id,\n data: {\n ...(props as GenVariable),\n labels,\n },\n })\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n event('variable.edit.success', {id, name: resp?.data?.name})\n const variable = normalize(\n resp.data,\n variableSchema\n )\n\n dispatch(setVariable(id, RemoteDataState.Done, variable))\n dispatch(notify(copy.updateVariableSuccess(resp.data.name)))\n } catch (error) {\n event('variable.edit.failure', {id})\n console.error(error)\n dispatch(setVariable(id, RemoteDataState.Error))\n dispatch(notify(copy.updateVariableFailed(error.message)))\n }\n }\n\nexport const deleteVariable =\n (id: string) => async (dispatch: Dispatch) => {\n try {\n dispatch(setVariable(id, RemoteDataState.Loading))\n const resp = await api.deleteVariable({variableID: id})\n if (resp.status !== 204) {\n throw new Error(resp.data.message)\n }\n event('variable.delete.success', {id})\n dispatch(removeVariable(id))\n dispatch(notify(copy.deleteVariableSuccess()))\n } catch (error) {\n event('variable.delete.failure', {id})\n console.error(error)\n dispatch(setVariable(id, RemoteDataState.Done))\n dispatch(notify(copy.deleteVariableFailed(error.message)))\n }\n }\n\nexport const moveVariable =\n (originalIndex: number, newIndex: number) =>\n async (dispatch, getState: GetState) => {\n const contextID = currentContext(getState())\n const byDashboardVariables = getVariablesForDashboard(getState())\n const oldDashboardVarOrder = [...byDashboardVariables]\n const temp = byDashboardVariables[originalIndex]\n byDashboardVariables[originalIndex] = byDashboardVariables[newIndex]\n byDashboardVariables[newIndex] = temp\n\n api\n .patchVariable({\n variableID: temp.id,\n data: {\n ...(temp as GenVariable),\n sort_order: newIndex,\n } as GenVariable,\n })\n .then(() => {\n api.patchVariable({\n variableID: byDashboardVariables[newIndex].id,\n data: {\n ...(byDashboardVariables[newIndex] as GenVariable),\n sort_order: originalIndex,\n } as GenVariable,\n })\n event('variable.sorted', {\n id: byDashboardVariables[newIndex]?.id,\n newIndex,\n })\n })\n .catch(async err => {\n await dispatch(\n moveVariableInState(\n contextID,\n oldDashboardVarOrder.map((v: Variable) => v.id)\n )\n )\n dispatch(\n notify(\n copy.moveVariableFailed(\n err.message ?? 'Unable to move variable at this time.'\n )\n )\n )\n })\n\n await dispatch(\n moveVariableInState(\n contextID,\n byDashboardVariables.map((v: Variable) => v.id)\n )\n )\n }\n\nexport const addVariableLabelAsync =\n (variableID: string, label: Label) =>\n async (dispatch): Promise => {\n try {\n const posted = await api.postVariablesLabel({\n variableID,\n data: {labelID: label.id},\n })\n\n if (posted.status !== 201) {\n throw new Error(posted.data.message)\n }\n\n const resp = await api.getVariable({variableID})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const variable = normalize(\n resp.data,\n variableSchema\n )\n\n dispatch(setVariable(variableID, RemoteDataState.Done, variable))\n } catch (error) {\n console.error(error)\n dispatch(notify(copy.addVariableLabelFailed()))\n }\n }\n\nexport const removeVariableLabelAsync =\n (variableID: string, label: Label) => async (dispatch: Dispatch) => {\n try {\n const deleted = await api.deleteVariablesLabel({\n variableID,\n labelID: label.id,\n })\n\n if (deleted.status !== 204) {\n throw new Error(deleted.data.message)\n }\n\n const resp = await api.getVariable({variableID})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const variable = normalize(\n resp.data,\n variableSchema\n )\n\n dispatch(setVariable(variableID, RemoteDataState.Done, variable))\n } catch (error) {\n console.error(error)\n dispatch(notify(copy.removeVariableLabelFailed()))\n }\n }\n\nexport const selectValue =\n (variableID: string, selected: string) =>\n async (\n dispatch: Dispatch<\n Action | ReturnType | RouterAction\n >,\n getState: GetState\n ) => {\n const state = getState()\n const contextID = currentContext(state)\n const variable = getVariableFromState(state, variableID)\n // Validate that we can make this selection\n const vals = normalizeValues(variable)\n if (!vals.includes(selected)) {\n // TODO: there is an issue that's causing non-state set values to\n // return with no results and not respect query params\n dispatch(\n notify(\n copy.invalidVariableNameValuePairInURLQuery(variable.name, selected)\n )\n )\n return\n }\n\n await dispatch(selectValueInState(contextID, variableID, selected))\n\n dispatch(hydrateVariables(true))\n dispatch(updateQueryVars({[variable.name]: selected}))\n }\n","import {FluxToolbarFunction} from 'src/types/shared'\n\nexport const DOCS_URL_VERSION = !!process.env.CLOUD_URL ? 'cloud' : 'latest'\n\nexport const FROM: FluxToolbarFunction = {\n name: 'from',\n args: [\n {\n name: 'bucket',\n desc: 'Name of the bucket to query.',\n type: 'String',\n },\n {\n name: 'bucketID',\n desc: 'String-encoded ID of the bucket to query.',\n type: 'String',\n },\n {\n name: 'host',\n desc: 'URL of the InfluxDB instance to query (only required when querying a different organization or remote InfluxDB instance).',\n type: 'String',\n },\n {\n name: 'org',\n desc: 'Organization name (only required when querying a different organization or remote InfluxDB instance).',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'String-encoded organization ID (only required when querying a different organization or remote InfluxDB instance).',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB authentication token (only required when querying a different organization or remote InfluxDB instance).',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Used to retrieve data from an InfluxDB data source. It returns a stream of tables from the specified bucket. Each unique series is contained within its own table. Each record in the table represents a single point in the series.',\n example: 'from(bucket: \"example-bucket\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/inputs/from/`,\n}\n\nexport const RANGE: FluxToolbarFunction = {\n name: 'range',\n args: [\n {\n name: 'start',\n desc: 'The earliest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'The latest time to include in results. Defaults to `now()`.',\n type: 'Duration | Time | Integer',\n },\n ],\n package: '',\n desc: \"Filters records based on time bounds. Each input table's records are filtered to contain only records that exist within the time bounds. 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.\",\n example: 'range(start: -15m, stop: now())',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/range/`,\n}\n\nexport const MEAN: FluxToolbarFunction = {\n name: 'mean',\n args: [\n {\n name: 'column',\n desc: 'The column on which to compute the mean. Defaults to `\"_value\"`',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the mean or average of non-null records in the input table.',\n example: 'mean(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/mean/`,\n}\n\nexport const UNION: FluxToolbarFunction = {\n name: 'union',\n args: [\n {\n name: 'tables',\n desc: 'Specifies the streams to union together. There must be at least two streams.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Concatenates two or more input streams into a single output stream. The output schemas of the `union()` function is the union of all input schemas. A sort operation may be added if a specific sort order is needed.',\n example: 'union(tables: [table1, table2])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/union/`,\n}\n\nexport const MATH_ABS: FluxToolbarFunction = {\n name: 'math.abs',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the absolute value of x.',\n example: 'math.abs(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/abs/`,\n}\n\nexport const MATH_FLOOR: FluxToolbarFunction = {\n name: 'math.floor',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the greatest integer value less than or equal to x.',\n example: 'math.floor(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/floor/`,\n}\n\nexport const STRINGS_TITLE: FluxToolbarFunction = {\n name: 'strings.title',\n args: [\n {\n name: 'v',\n desc: 'The string value to convert.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Converts a string to title case.',\n example: 'strings.title(v: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/title/`,\n}\n\nexport const STRINGS_TRIM: FluxToolbarFunction = {\n name: 'strings.trim',\n args: [\n {\n name: 'v',\n desc: 'The string value to trim.',\n type: 'String',\n },\n {\n name: 'cutset',\n desc: 'The leading and trailing characters to trim from the string value. Only characters that match exactly are trimmed.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes specified leading and trailing characters from a string.',\n example: 'strings.trim(v: r._value, cutset: \"_\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trim/`,\n}\n\nexport const FLUX_FUNCTIONS: FluxToolbarFunction[] = [\n {\n name: 'aggregate.rate',\n args: [\n {\n name: 'every',\n desc: 'Duration of windows.',\n type: 'Duration',\n },\n {\n name: 'groupColumns',\n desc: 'List of columns to group by. Defaults to [].',\n type: 'Array of Strings',\n },\n {\n name: 'unit',\n desc: 'Time duration to use when calculating the rate. Defaults to `1s`.',\n type: 'Duration',\n },\n ],\n package: 'experimental/aggregate',\n desc: 'Calculates the rate of change per windows of time.',\n example: 'aggregate.rate(every: 1m, unit: 1s)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/aggregate/rate/`,\n },\n {\n name: 'aggregateWindow',\n args: [\n {\n name: 'every',\n desc: 'The duration of windows.',\n type: 'Duration',\n },\n {\n name: 'fn',\n desc: 'The aggregate function used in the operation.',\n type: 'Unquoted String',\n },\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'timeSrc',\n desc: 'The \"time source\" column from which time is copied for the aggregate record. Defaults to `\"_stop\"`.',\n type: 'String',\n },\n {\n name: 'timeDst',\n desc: 'The \"time destination\" column to which time is copied for the aggregate record. Defaults to `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'createEmpty',\n desc: 'For windows without data, this will create an empty window and fill it with a `null` aggregate value.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Applies an aggregate function to fixed windows of time.',\n example: 'aggregateWindow(every: v.windowPeriod, fn: mean)',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/aggregatewindow/`,\n },\n {\n name: 'alerta.alert',\n args: [\n {\n name: 'url',\n desc: 'Alerta URL.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Alerta API key.',\n type: 'String',\n },\n {\n name: 'resource',\n desc: 'Resource associated with the alert.',\n type: 'String',\n },\n {\n name: 'event',\n desc: 'Event name.',\n type: 'String',\n },\n {\n name: 'environment',\n desc: 'Alert environment. Default is `\"\"`. Valid values are `\"\"`, `\"Production\"`, or `\"Development\"`.',\n type: 'String',\n },\n {\n name: 'severity',\n desc: 'Event severity.',\n type: 'String',\n },\n {\n name: 'service',\n desc: 'List of affected services. Default is `[]`.',\n type: 'Array of strings',\n },\n {\n name: 'group',\n desc: 'Alerta event group. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'value',\n desc: 'Event value. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'Alert text description. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'tags',\n desc: 'List of event tags. Default is `[]`.',\n type: 'Array of strings',\n },\n {\n name: 'attributes',\n desc: 'Alert attributes.',\n type: 'Record',\n },\n {\n name: 'origin',\n desc: 'Alert origin. Default is `\"InfluxDB\"`.',\n type: 'String',\n },\n {\n name: 'type',\n desc: 'Event type. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'timestamp',\n desc: 'time alert was generated. Default is `now()`.',\n type: 'Time',\n },\n ],\n package: 'contrib/bonitoo-io/alerta',\n desc: 'Sends an alert to Alerta.',\n example: `alerta.alert(\n url: \"https://alerta.io:8080/alert\",\n apiKey: \"0Xx00xxXx00Xxx0x0X\",\n resource: \"example-resource\",\n event: \"Example event\",\n environment: \"\",\n severity: \"critical\",\n service: [],\n group: \"\",\n value: \"\",\n text: \"\",\n tags: [],\n attributes: {},\n origin: \"InfluxDB\",\n type: \"\",\n timestamp: now()\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/alerta/alert/`,\n },\n {\n name: 'alerta.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Alerta URL.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Alerta API key.',\n type: 'String',\n },\n {\n name: 'environment',\n desc: 'Alert environment. Default is `\"\"`. Valid values are `\"\"`, `\"Production\"`, or `\"Development\"`.',\n type: 'String',\n },\n {\n name: 'origin',\n desc: 'Alert origin. Default is `\"InfluxDB\"`.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/alerta',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = alerta.endpoint(\n url: \"https://alerta.io:8080/alert\",\n apiKey: apiKey,\n environment: \"Production\",\n origin: \"InfluxDB\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/alerta/endpoint/`,\n },\n {\n name: 'array.from',\n args: [\n {\n name: 'rows',\n desc: 'Array of records to construct a table with.',\n type: 'Array of Objects',\n },\n ],\n package: 'array',\n desc: 'Constructs a table from an array of objects.',\n example:\n 'array.from(rows: [{_time: 2020-01-01T00:00:00Z, _value: \"foo\"},{_time: 2020-01-02T00:00:00Z, _value: \"bar\"}])',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/array/from/`,\n },\n {\n name: 'bigpanda.endpoint',\n args: [\n {\n name: 'url',\n desc: 'BigPanda alerts API URL. Default is the value of the `bigpanda.defaultURL` option.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'BigPanda API Authorization token (API key).',\n type: 'String',\n },\n {\n name: 'appKey',\n desc: 'BigPanda App Key.',\n type: 'String',\n },\n ],\n package: 'contrib/rhajek/bigpanda',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = bigpanda.endpoint(\n token: token,\n appKey: \"example-app-key\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/bigpanda/endpoint/`,\n },\n {\n name: 'bigpanda.sendAlert',\n args: [\n {\n name: 'url',\n desc: 'BigPanda alerts API URL. Default is the value of the `bigpanda.defaultURL` option.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'BigPanda API Authorization token (API key).',\n type: 'String',\n },\n {\n name: 'appKey',\n desc: 'BigPanda App Key.',\n type: 'String',\n },\n {\n name: 'status',\n desc: 'BigPanda alert status. Supported statuses are `\"ok\"`, `\"critical\"`, `\"warning\"`, `\"acknowledged\"`.',\n type: 'String',\n },\n {\n name: 'rec',\n desc: 'Additional alert parameters to send to the BigPanda alert API.',\n type: 'Record',\n },\n ],\n package: 'contrib/rhajek/bigpanda',\n desc: 'Sends an alert to BigPanda.',\n example: `bigpanda.sendAlert(\n url: \"https://api.bigpanda.io/data/v2/alerts\",\n token: \"my5uP3rS3cRe7t0k3n\",\n appKey: \"example-app-key\",\n status: \"critical\",\n rec: {},\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/bigpanda/sendalert/`,\n },\n {\n name: 'bigpanda.statusFromLevel',\n args: [\n {\n name: 'level',\n desc: 'Alert level.',\n type: 'String',\n },\n ],\n package: 'contrib/rhajek/bigpanda',\n desc: 'Converts an alert level into a BigPanda status.',\n example: 'bigpanda.statusFromLevel(level: \"crit\")',\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/bigpanda/statusfromlevel/`,\n },\n {\n name: 'bigtable.from',\n args: [\n {\n name: 'token',\n desc: 'The Google Cloud IAM token to use to access the Cloud Bigtable database.',\n type: 'String',\n },\n {\n name: 'project',\n desc: 'The project ID of the Cloud Bigtable project to retrieve data from.',\n type: 'String',\n },\n {\n name: 'instance',\n desc: 'The instance ID of the Cloud Bigtable instance to retrieve data from.',\n type: 'String',\n },\n {\n name: 'table',\n desc: 'The name of the Cloud Bigtable table to retrieve data from.',\n type: 'String',\n },\n ],\n package: 'experimental/bigtable',\n desc: 'Retrieves data from a Google Cloud Bigtable data source.',\n example:\n 'bigtable.from(token: \"mySuPeRseCretTokEn\", project: \"exampleProjectID\", instance: \"exampleInstanceID\", table: \"example-table\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/bigtable/from/`,\n },\n {\n name: 'bool',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'String | Integer | UInteger | Float',\n },\n ],\n package: '',\n desc: 'Converts a single value to a boolean.',\n example: 'bool(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/bool/`,\n },\n {\n name: 'bottom',\n args: [\n {\n name: 'n',\n desc: 'The number of rows to return.',\n type: 'Integer',\n },\n {\n name: 'columns',\n desc: 'List of columns by which to sort. Sort precedence is determined by list order (left to right) .Default is `[\"_value\"]`',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Sorts a table by columns and keeps only the bottom n rows.',\n example: 'bottom(n:10, columns: [\"_value\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/bottom/`,\n },\n {\n name: 'buckets',\n args: [],\n package: '',\n desc: 'Returns a list of buckets in the organization.',\n example: 'buckets()',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/inputs/buckets/`,\n },\n {\n name: 'bytes',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Converts a single value to bytes.',\n example: 'bytes(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/bytes/`,\n },\n {\n name: 'chandeMomentumOscillator',\n args: [\n {\n name: 'n',\n desc: 'The period or number of points to use in the calculation.',\n type: 'Integer',\n },\n {\n name: 'columns',\n desc: 'Columns to operate on. Defaults to `[\"_value\"]`.',\n type: 'Array of Strings`',\n },\n ],\n package: '',\n desc: 'Applies the technical momentum indicator developed by Tushar Chande.',\n example: 'chandeMomentumOscillator(n: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/chandemomentumoscillator/`,\n },\n {\n name: 'columns',\n args: [\n {\n name: 'column',\n desc: 'The name of the output column in which to store the column labels.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Lists the column labels of input tables.',\n example: 'columns(column: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/columns/`,\n },\n {\n name: 'contains',\n args: [\n {\n name: 'value',\n desc: 'The value to search for.',\n type: 'Boolean | Integer | UInteger | Float | String | Time',\n },\n {\n name: 'set',\n desc: 'The set of values in which to search.',\n type: 'Boolean | Integer | UInteger | Float | String | Time',\n },\n ],\n package: '',\n desc: 'Tests whether a value is a member of a set.',\n example: 'contains(value: 1, set: [1,2,3])',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/tests/contains/`,\n },\n {\n name: 'count',\n args: [\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Outputs the number of records in the specified column.',\n example: 'count(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/count/`,\n },\n {\n name: 'cov',\n args: [\n {\n name: 'x',\n desc: 'One input stream used to calculate the covariance.',\n type: 'Object',\n },\n {\n name: 'y',\n desc: 'The other input table used to calculate the covariance.',\n type: 'Object',\n },\n {\n name: 'on',\n desc: 'The list of columns on which to join.',\n type: 'Array of Strings',\n },\n {\n name: 'pearsonr',\n desc: 'Indicates whether the result should be normalized to be the Pearson R coefficient',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Computes the covariance between two streams by first joining the streams, then performing the covariance operation.',\n example:\n 'cov(x: table1, y: table2, on: [\"_time\", \"_field\"], pearsonr: false)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/cov/`,\n },\n {\n name: 'covariance',\n args: [\n {\n name: 'columns',\n desc: 'A list of columns on which to operate. Exactly two columns must be provided.',\n type: 'Array of Strings',\n },\n {\n name: 'pearsonr',\n desc: 'Indicates whether the result should be normalized to be the Pearson R coefficient',\n type: 'Boolean',\n },\n {\n name: 'valueDst',\n desc: 'The column into which the result will be placed. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the covariance between two columns.',\n example:\n 'covariance(columns: [\"column_x\", \"column_y\"], pearsonr: false, valueDst: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/covariance/`,\n },\n {\n name: 'csv.from',\n args: [\n {\n name: 'file',\n desc: 'The file path of the CSV file to query.',\n type: 'String',\n },\n {\n name: 'csv',\n desc: 'Raw CSV-formatted text. CSV data must be in the CSV format produced by the Flux HTTP response standard.',\n type: 'String',\n },\n ],\n package: 'csv',\n desc: 'Retrieves data from a comma-separated value (CSV) data source.',\n example: 'csv.from(csv: csvData)',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/csv/from/`,\n },\n {\n name: 'csv.from',\n args: [\n {\n name: 'url',\n desc: 'The URL to retrieve annotated CSV from.',\n type: 'String',\n },\n ],\n package: 'experimental/csv',\n desc: 'Retrieves annotated CSV data from a URL.',\n example: 'csv.from(url: \"http://example.com/data.csv\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/csv/from/`,\n },\n {\n name: 'cumulativeSum',\n args: [\n {\n name: 'columns',\n desc: 'A list of columns on which to operate. Defaults to `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Computes a running sum for non-null records in the table. The output table schema will be the same as the input table.',\n example: 'cumulativeSum(columns: [\"_value\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/cumulativesum/`,\n },\n {\n name: 'date.hour',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the hour of a specified time. Results range from `[0-23]`.',\n example: 'date.hour(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/hour/`,\n },\n {\n name: 'date.microsecond',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the microsecond of a specified time. Results range from `[1-999999]`.',\n example: 'date.microsecond(t: 2019-07-17T12:05:21.012934584Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/microsecond/`,\n },\n {\n name: 'date.millisecond',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the millisecond of a specified time. Results range from `[1-999]`.',\n example: 'date.millisecond(t: 2019-07-17T12:05:21.012934584Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/millisecond/`,\n },\n {\n name: 'date.minute',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the minute of a specified time. Results range from `[0-59]`.',\n example: 'date.minute(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/minute/`,\n },\n {\n name: 'date.month',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the month of a specified time. Results range from `[1-12]`.',\n example: 'date.month(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/month/`,\n },\n {\n name: 'date.monthDay',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the day of the month for a specified time. Results range from `[1-31]`.',\n example: 'date.monthDay(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/monthday/`,\n },\n {\n name: 'date.nanosecond',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the nanosecond of a specified time. Results range from `[1-999999999]`.',\n example: 'date.nanosecond(t: 2019-07-17T12:05:21.012934584Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/nanosecond/`,\n },\n {\n name: 'date.quarter',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the quarter of the year for a specified time. Results range from `[1-4]`.',\n example: 'date.quarter(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/quarter/`,\n },\n {\n name: 'date.second',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the second of a specified time. Results range from `[0-59]`.',\n example: 'date.second(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/second/`,\n },\n {\n name: 'date.truncate',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n {\n name: 'unit',\n desc: 'The unit time to truncate to. Only use `1` and the unit of time to specify the `unit`. For example, `1s`, `1m`, `1h`.',\n type: 'Duration',\n },\n ],\n package: 'date',\n desc: 'Truncates the time to a specified unit. Results range from `[0-59]`.',\n example: 'date.truncate(t: 2019-07-17T12:05:21.012Z, unit: 1s)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/truncate/`,\n },\n {\n name: 'date.week',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the ISO week of the year for a specified time. Results range from `[1-53]`.',\n example: 'date.week(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/week/`,\n },\n {\n name: 'date.weekDay',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the day of the week for a specified time. Results range from `[0-6]`.',\n example: 'date.weekDay(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/weekday/`,\n },\n {\n name: 'date.year',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the year of a specified time.',\n example: 'date.year(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/year/`,\n },\n {\n name: 'date.yearDay',\n args: [\n {\n name: 't',\n desc: 'The time to operate on.',\n type: 'Time | Duration',\n },\n ],\n package: 'date',\n desc: 'Returns the day of the year for a specified time. Results include leap days and range from `[1-366]`.',\n example: 'date.yearDay(t: 2019-07-17T12:05:21.012Z)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/date/yearday/`,\n },\n {\n name: 'derivative',\n args: [\n {\n name: 'unit',\n desc: 'The time duration used when creating the derivative.',\n type: 'Duration',\n },\n {\n name: 'nonNegative',\n desc: '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.',\n type: 'Boolean',\n },\n {\n name: 'columns',\n desc: 'A list of columns on which to operate. Defaults to `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n {\n name: 'timeColumn',\n desc: 'The column name for the time values. Defaults to `\"_time\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the rate of change per unit of time between subsequent non-null records. The output table schema will be the same as the input table.',\n example:\n 'derivative(unit: 1s, nonNegative: true, columns: [\"_value\"], timeColumn: \"_time\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/derivative/`,\n },\n {\n name: 'dict.fromList',\n args: [\n {\n name: 'pairs',\n desc: 'List of records, each containing `key` and `value` properties.',\n type: 'Array of records',\n },\n ],\n package: 'dict',\n desc: 'Creates a dictionary from a list of records with `key` and `value` properties.',\n example: `dict.fromList(\n pairs: [\n {key: 1, value: \"foo\"},\n {key: 2, value: \"bar\"}\n ]\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/dict/fromlist/`,\n },\n {\n name: 'dict.get',\n args: [\n {\n name: 'dict',\n desc: 'Dictionary to return a value from.',\n type: 'Dictionary',\n },\n {\n name: 'key',\n desc: 'Key to return from the dictionary.',\n type: 'String | Boolean | Integer | Uinteger | Float | Time | Bytes',\n },\n {\n name: 'default',\n desc: 'Default value to return if the key does not exist in the dictionary. Must be the same type as values in the dictionary.',\n type: 'String | Boolean | Integer | Uinteger | Float | Time | Bytes',\n },\n ],\n package: 'dict',\n desc: 'Returns the value of a specified key in a dictionary or a default value if the key does not exist.',\n example: `dict.get(\n dict: [1: \"foo\", 2: \"bar\"],\n key: 1,\n default: \"\"\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/dict/get/`,\n },\n {\n name: 'dict.insert',\n args: [\n {\n name: 'dict',\n desc: 'Dictionary to update.',\n type: 'Dictionary',\n },\n {\n name: 'key',\n desc: 'Key to insert into the dictionary. Must be the same type as existing keys in the dictionary.',\n type: 'String | Boolean | Integer | Uinteger | Float | Time | Bytes',\n },\n {\n name: 'default',\n desc: 'Value to insert into the dictionary. Must be the same type as existing values in the dictionary.',\n type: 'String | Boolean | Integer | Uinteger | Float | Time | Bytes',\n },\n ],\n package: 'dict',\n desc: 'Inserts a key value pair into a dictionary and returns a new, updated dictionary. If the key already exists in the dictionary, the function overwrites the existing value.',\n example: `dict.insert(\n dict: [1: \"foo\", 2: \"bar\"],\n key: 3,\n value: \"baz\"\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/dict/insert/`,\n },\n {\n name: 'dict.remove',\n args: [\n {\n name: 'dict',\n desc: 'Dictionary to remove a key-value pair from.',\n type: 'Dictionary',\n },\n {\n name: 'key',\n desc: 'Key to remove from the dictionary. Must be the same type as existing keys in the dictionary.',\n type: 'String | Boolean | Integer | Uinteger | Float | Time | Bytes',\n },\n ],\n package: 'dict',\n desc: 'Removes a key value pair from a dictionary and returns an updated dictionary.',\n example: `dict.remove(\n dict: [1: \"foo\", 2: \"bar\"],\n key: 1\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/dict/remove/`,\n },\n {\n name: 'difference',\n args: [\n {\n name: 'nonNegative',\n desc: '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.',\n type: 'Boolean',\n },\n {\n name: 'columns',\n desc: 'The columns to use to compute the difference. Defaults to `\"_value\"`.',\n type: 'Array of Strings',\n },\n {\n name: 'keepFirst',\n desc: 'Indicates the first row should be kept. If `true`, the difference will be `null`. Defaults to `false`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Computes the difference between subsequent non-null records in the specified columns.',\n example: 'difference(nonNegative: false, columns: [\"_value\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/difference/`,\n },\n {\n name: 'discord.endpoint',\n args: [\n {\n name: 'webhookToken',\n desc: 'Discord webhook token.',\n type: 'String',\n },\n {\n name: 'webhookID',\n desc: 'Discord webhook ID.',\n type: 'String',\n },\n {\n name: 'username',\n desc: 'Override the Discord webhook’s default username.',\n type: 'String',\n },\n {\n name: 'avatar_url',\n desc: 'Override the Discord webhook’s default avatar.',\n type: 'String',\n },\n ],\n package: 'contrib/chobbs/discord',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = telegram.endpoint(\n webhookToken: discordToken,\n webhookID: \"123456789\",\n username: \"critBot\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/discord/endpoint/`,\n },\n {\n name: 'discord.send',\n args: [\n {\n name: 'webhookToken',\n desc: 'Discord webhook token.',\n type: 'String',\n },\n {\n name: 'webhookID',\n desc: 'Discord webhook ID.',\n type: 'String',\n },\n {\n name: 'username',\n desc: 'Override the Discord webhook’s default username.',\n type: 'String',\n },\n {\n name: 'content',\n desc: 'Message to send to Discord (2000 character limit).',\n type: 'String',\n },\n {\n name: 'avatar_url',\n desc: 'Override the Discord webhook’s default avatar.',\n type: 'String',\n },\n ],\n package: 'contrib/chobbs/discord',\n desc: 'Sends a single message to a Discord channel using a Discord webhook.',\n example: `discord.send(\n webhookToken: \"mySuPerSecRetTokEn\",\n webhookID: \"123456789\",\n username: \"username\",\n content: \"This is an example message\",\n avatar_url: \"https://example.com/avatar_pic.jpg\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/discord/send/`,\n },\n {\n name: 'distinct',\n args: [\n {\n name: 'column',\n desc: 'Column on which to track unique values.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Returns the unique values for a given column.',\n example: 'distinct(column: \"host\")',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/distinct/`,\n },\n {\n name: 'doubleEMA',\n args: [\n {\n name: 'n',\n desc: 'The number of points to average.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: '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()`.',\n example: 'doubleEMA(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/doubleema/`,\n },\n {\n name: 'drop',\n args: [\n {\n name: 'columns',\n desc: 'A list of columns to be removed from the table. Cannot be used with `fn`.',\n type: 'Array of Strings',\n },\n {\n name: 'fn',\n desc: 'A function which takes a column name as a parameter and returns a boolean indicating whether or not the column should be removed from the table. Cannot be used with `columns`.',\n type: 'Function',\n },\n ],\n package: '',\n desc: 'Removes specified columns from a table. Columns can be 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.',\n example: 'drop(columns: [\"col1\", \"col2\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/drop/`,\n },\n {\n name: 'duplicate',\n args: [\n {\n name: 'column',\n desc: 'The column name to duplicate.',\n type: 'String',\n },\n {\n name: 'as',\n desc: 'The name assigned to the duplicate column.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Duplicates a specified column in a table.',\n example: 'duplicate(column: \"column-name\", as: \"duplicate-name\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/duplicate/`,\n },\n {\n name: 'duration',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Converts a single value to a duration.',\n example: 'duration(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/duration/`,\n },\n {\n name: 'elapsed',\n args: [\n {\n name: 'unit',\n desc: 'The unit of time to return. Defaults to `1s`.',\n type: 'Duration',\n },\n {\n name: 'timeColumn',\n desc: 'The column to use to compute the elapsed time. Defaults to `\"_time\"`.',\n type: 'String`',\n },\n {\n name: 'columnName',\n desc: 'The column to store elapsed times. Defaults to `\"elapsed\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Returns the time between subsequent records.',\n example: 'elapsed(unit: 1s)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/elapsed/`,\n },\n {\n name: 'events.duration',\n args: [\n {\n name: 'unit',\n desc: 'Duration unit of the calculated state duration. Default is `1ns`.',\n type: 'Duration',\n },\n {\n name: 'columnName',\n desc: 'Name of the result column. Default is `\"duration\"`.',\n type: 'String',\n },\n {\n name: 'timeColumn',\n desc: 'Name of the time column. Default is `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'stopColumn',\n desc: 'Name of the stop column. Default is `\"_stop\"`.',\n type: 'String',\n },\n {\n name: 'stop',\n desc: 'The latest time to use when calculating results. If provided, `stop` overrides the time value in the `stopColumn`.',\n type: 'Time',\n },\n ],\n package: 'contrib/tomhollingworth/events',\n desc: 'Calculates the duration of events. The function determines the time between a record and the subsequent record and associates the duration with the first record (start of the event).',\n example: `events.duration(\n unit: 1ns,\n columnName: \"duration\",\n timeColumn: \"_time\",\n stopColumn: \"_stop\",\n stop: 2020-01-01T00:00:00Z\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/events/duration/`,\n },\n {\n name: 'experimental.addDuration',\n args: [\n {\n name: 'd',\n desc: 'The duration to add.',\n type: 'Duration',\n },\n {\n name: 'to',\n desc: 'The time to add the duration to.',\n type: 'Time',\n },\n ],\n package: 'experimental',\n desc: 'Adds a duration to a time value and returns the resulting time value.',\n example: 'experimental.addDuration(d: 12h, to: now())',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/addduration/`,\n },\n {\n name: 'experimental.alignTime',\n args: [\n {\n name: 'alignTo',\n desc: 'UTC time to align tables to. Default is 1970-01-01T00:00:00Z.',\n type: 'Time',\n },\n ],\n package: 'experimental',\n desc: 'Aligns input tables to a common start time.',\n example: 'experimental.alignTime(alignTo: v.timeRangeStart)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/aligntime/`,\n },\n {\n name: 'experimental.chain',\n args: [\n {\n name: 'first',\n desc: 'The first query to execute.',\n type: 'Stream of Tables',\n },\n {\n name: 'second',\n desc: 'The second query to execute.',\n type: 'Stream of Tables',\n },\n ],\n package: 'experimental',\n desc: 'Executes two queries sequentially rather than in parallel and outputs the results of the second query.',\n example: 'experimental.chain(first: query1, second: query2)',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/chain/`,\n },\n {\n name: 'experimental.count',\n args: [],\n package: 'experimental',\n desc: 'Outputs the number of records in each input table and returns the count in the `_value` column. This function counts both null and non-null records.',\n example: 'experimental.count()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/count/`,\n },\n {\n name: 'experimental.distinct',\n args: [],\n package: 'experimental',\n desc: 'Returns unique values from the `_value` column. The `_value` of each output record is set to a distinct value in the specified column. `null` is considered a distinct value.',\n example: 'experimental.distinct()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/distinct/`,\n },\n {\n name: 'experimental.fill',\n args: [\n {\n name: 'value',\n desc: 'Value to replace null values with. Data type must match the type of the `_value` column.',\n type: 'Boolean | Integer | UInteger | Float | String | Time | Duration',\n },\n {\n name: 'usePrevious',\n desc: 'When `true`, replaces null values with the value of the previous non-null row.',\n type: 'Boolean',\n },\n ],\n package: 'experimental',\n desc: 'Replaces all null values in the `_value` column with a non-null value.',\n example: 'experimental.fill(value: 0.0)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/fill/`,\n },\n {\n name: 'experimental.first',\n args: [],\n package: 'experimental',\n desc: 'Returns the first record with a non-null value in the `_value` column.',\n example: 'experimental.first()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/first/`,\n },\n {\n name: 'experimental.group',\n args: [\n {\n name: 'columns',\n desc: 'List of columns to use in the grouping operation. Defaults to `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'mode',\n desc: 'The mode used to group columns. Only the `extend` mode is available with this function.',\n type: 'String',\n },\n ],\n package: 'experimental',\n desc: 'Introduces an extend mode to the existing `group()` function.',\n example:\n 'experimental.group(columns: [\"host\", \"_measurement\"], mode: \"extend\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/group/`,\n },\n {\n name: 'experimental.histogram',\n args: [\n {\n name: 'bins',\n desc: 'A list of upper bounds to use when computing the histogram frequencies, including the maximum value of the data set. This value can be set to positive infinity if no maximum is known.',\n type: 'Array of floats',\n },\n {\n name: 'normalize',\n desc: 'Convert count values into frequency values between 0 and 1. Default is `false`.',\n type: 'Boolean',\n },\n ],\n package: 'experimental',\n desc: 'Approximates the cumulative distribution of a dataset by counting data frequencies for a list of bins.',\n example: `experimental.histogram(\n bins: [50.0, 75.0, 90.0],\n normalize: false\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/histogram/`,\n },\n {\n name: 'experimental.histogramQuantile',\n args: [\n {\n name: 'quantile',\n desc: 'A value between 0 and 1 indicating the desired quantile to compute.',\n type: 'Float',\n },\n {\n name: 'minValue',\n desc: 'The assumed minimum value of the dataset.',\n type: 'Float',\n },\n ],\n package: 'experimental',\n desc: 'Approximates a quantile given a histogram with the cumulative distribution of the dataset.',\n example: `experimental.histogramQuantile(\n quantile: 0.5,\n minValue: 0.0\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/histogramquantile/`,\n },\n {\n name: 'experimental.integral',\n args: [\n {\n name: 'unit',\n desc: 'Time duration used to compute the integral.',\n type: 'Duration',\n },\n {\n name: 'interpolate',\n desc: 'Type of interpolation to use. Defaults to `\"\"`.',\n type: 'String',\n },\n ],\n package: 'experimental',\n desc: 'Computes the area under the curve per `unit` of time of subsequent non-null records.',\n example: `integral(\n unit: 10s,\n interpolate: \"\"\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/integral/`,\n },\n {\n name: 'experimental.join',\n args: [\n {\n name: 'left',\n desc: 'First of two streams of tables to join.',\n type: 'Stream of tables',\n },\n {\n name: 'right',\n desc: 'Second of two streams of tables to join.',\n type: 'Stream of tables',\n },\n {\n name: 'fn',\n desc: 'A function that maps new output rows using left and right input rows.',\n type: 'Function',\n },\n ],\n package: 'experimental',\n desc: 'Joins two streams of tables on the group key and _time column. Use the fn parameter to map output tables.',\n example:\n 'experimental.join(left: left, right: right, fn: (left, right) => ({left with lv: left._value, rv: right._value }))',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/join/`,\n },\n {\n name: 'experimental.kaufmansAMA',\n args: [\n {\n name: 'n',\n desc: 'The period or number of points to use in the calculation.',\n type: 'Integer',\n },\n ],\n package: 'experimental',\n desc: 'Calculates the Kaufman’s Adaptive Moving Average (KAMA) of input tables using the `_value` column in each table.',\n example: 'experimental.kaufmansAMA(n: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/kaufmansama/`,\n },\n {\n name: 'experimental.last',\n args: [],\n package: 'experimental',\n desc: 'Returns the last record with a non-null value in the `_value` column.',\n example: 'experimental.last()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/last/`,\n },\n {\n name: 'experimental.max',\n args: [],\n package: 'experimental',\n desc: 'Returns the record with the highest value in the `_value` column for each input table.',\n example: 'experimental.max()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/max/`,\n },\n {\n name: 'experimental.mean',\n args: [],\n package: 'experimental',\n desc: 'Computes the mean or average of non-null values in the `_value` column of each input table.',\n example: 'experimental.mean()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/mean/`,\n },\n {\n name: 'experimental.min',\n args: [],\n package: 'experimental',\n desc: 'Returns the record with the lowest value in the `_value` column for each input table.',\n example: 'experimental.min()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/min/`,\n },\n {\n name: 'experimental.mode',\n args: [],\n package: 'experimental',\n desc: 'Computes the mode or value that occurs most often in the `_value` column in each input table.',\n example: 'experimental.mode()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/mode/`,\n },\n {\n name: 'experimental.objectKeys',\n args: [\n {\n name: 'o',\n desc: 'The object to return keys from.',\n type: 'Object',\n },\n ],\n package: 'experimental',\n desc: 'Returns an array of keys in a specified object.',\n example: 'experimental.objectKeys(o: {key1: \"value1\", key2: \"value2\"})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/objectkeys/`,\n },\n {\n name: 'experimental.quantile',\n args: [\n {\n name: 'q',\n desc: 'A value between 0 and 1 thats specifies the quantile.',\n type: 'Float',\n },\n {\n name: 'method',\n desc: 'Computation method. Default is `estimate_tdigest`. Available options are `estimate_tdigest`, `exact_mean`, or `exact_selector`.',\n type: 'String',\n },\n {\n name: 'compression',\n desc: 'Indicates how many centroids to use when compressing the dataset.',\n type: 'Float',\n },\n ],\n package: 'experimental',\n desc: 'Outputs non-null records with values in the `_value` column that fall within the specified quantile or represent the specified quantile.',\n example: `experimental.quantile(\n q: 0.99,\n method: \"estimate_tdigest\",\n compression: 1000.0\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/quantile/`,\n },\n {\n name: 'experimental.set',\n args: [\n {\n name: 'o',\n desc: 'An object that defines the columns and values to set.',\n type: 'Object',\n },\n ],\n package: 'experimental',\n desc: 'Sets multiple static column values on all records.',\n example: 'experimental.set(o: {column1: \"value1\", column2: \"value2\"})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/set/`,\n },\n {\n name: 'experimental.skew',\n args: [],\n package: 'experimental',\n desc: 'Outputs the skew of non-null values in the `_value` column for each input table as a float.',\n example: 'experimental.skew()',\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/skew/`,\n },\n {\n name: 'experimental.spread',\n args: [],\n package: 'experimental',\n desc: 'Outputs the difference between the minimum and maximum values in the `_value` column for each input table.',\n example: 'experimental.spread()',\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/spread/`,\n },\n {\n name: 'experimental.stddev',\n args: [\n {\n name: 'mode',\n desc: 'The standard deviation mode or type of standard deviation to calculate. Defaults to `\"sample\"`. Available options are `sample` and `population`.',\n type: 'String',\n },\n ],\n package: 'experimental',\n desc: 'Computes the standard deviation of non-null values in the `_value` column for each input table.',\n example: 'experimental.stddev(mode: \"sample\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/stddev/`,\n },\n {\n name: 'experimental.subDuration',\n args: [\n {\n name: 'd',\n desc: 'The duration to subtract.',\n type: 'Duration',\n },\n {\n name: 'from',\n desc: 'The time to subtract the duration from.',\n type: 'Time',\n },\n ],\n package: 'experimental',\n desc: 'Subtracts a duration from a time value and returns the resulting time value.',\n example: 'experimental.subDuration(d: 12h, from: now())',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/subduration/`,\n },\n {\n name: 'experimental.sum',\n args: [],\n package: 'experimental',\n desc: 'Computes the sum of non-null values in the `_value` column for each input table.',\n example: 'experimental.sum()',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/sum/`,\n },\n {\n name: 'experimental.to',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket to write data to. `bucket` and `bucketID` are mutually exclusive.',\n type: 'String',\n },\n {\n name: 'bucketID',\n desc: 'The ID of the bucket to write data to. `bucketID` and `bucket` are mutually exclusive.',\n type: 'String',\n },\n {\n name: 'org',\n desc: 'The organization name of the specified bucket. `org` and `orgID` are mutually exclusive.',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'The organization ID of the specified bucket. `orgID` and `org` are mutually exclusive.',\n type: 'String',\n },\n ],\n package: 'experimental',\n desc: 'Writes data to an InfluxDB v2.0 bucket, but in a different structure than the built-in `to()` function.',\n example: 'experimental.to(bucket: \"example-bucket\", org: \"example-org\")',\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/to/`,\n },\n {\n name: 'exponentialMovingAverage',\n args: [\n {\n name: 'n',\n desc: 'The number of points to average.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Calculates the exponential moving average of values in the `_value` column grouped into `n` number of points, giving more weight to recent data.',\n example: 'exponentialMovingAverage(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/exponentialmovingaverage/`,\n },\n {\n name: 'fill',\n args: [\n {\n name: 'column',\n desc: 'The column in which to replace null values. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'value',\n desc: 'The constant value to use in place of nulls.',\n type: 'Value type of `column`',\n },\n {\n name: 'usePrevious',\n desc: 'When `true`, assigns the value set in the previous non-null row.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Replaces all null values in an input stream and replace them with a non-null value.',\n example: 'fill(column: \"_value\", usePrevious: true)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/fill/`,\n },\n {\n name: 'filter',\n args: [\n {\n name: 'fn',\n desc: '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.',\n type: 'Function',\n },\n {\n name: 'onEmpty',\n desc: 'Defines the behavior for empty tables. Potential values are `keep` and `drop`. Defaults to `drop`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Filters data based on conditions defined in the function. The output tables have the same schema as the corresponding input tables.',\n example: 'filter(fn: (r) => r._measurement == \"cpu\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/filter/`,\n },\n {\n name: 'findColumn',\n args: [\n {\n name: 'fn',\n desc: 'Predicate function for matching keys in a table’s group key.',\n type: 'Function',\n },\n {\n name: 'column',\n desc: 'Name of the column to extract.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Returns an array of values in a specified column from the first table in a stream of tables where the group key values match the specified predicate.',\n example: 'findColumn(fn: (key) => key.host == \"host1\", column: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stream-table/findcolumn/`,\n },\n {\n name: 'findRecord',\n args: [\n {\n name: 'fn',\n desc: 'Predicate function for matching keys in a table’s group key.',\n type: 'Function',\n },\n {\n name: 'idx',\n desc: 'Index of the record to extract.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Returns a record at a specified index from the first table in a stream of tables where the group key values match the specified predicate.',\n example: 'findRecord(fn: (key) => key.host == \"host1\", idx: 0)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stream-table/findrecord/`,\n },\n {\n name: 'first',\n args: [],\n package: '',\n desc: 'Selects the first non-null record from an input table.',\n example: 'first()',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/first/`,\n },\n {\n name: 'float',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'String | Integer | UInteger | Boolean',\n },\n ],\n package: '',\n desc: 'Converts a single value to a float.',\n example: 'float(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/float/`,\n },\n FROM,\n {\n name: 'geo.asTracks',\n args: [\n {\n name: 'groupBy',\n desc: 'Columns to group by. They should uniquely identify each track.',\n type: 'Array of Strings',\n },\n {\n name: 'orderBy',\n desc: 'Columns to order results by.',\n type: 'Array of Strings',\n },\n ],\n package: 'experimental/geo',\n desc: 'Groups geo-temporal data into tracks (sequential, related data points).',\n example: 'geo.asTracks(groupBy: [\"id\",\"tid\"], orderBy: [\"_time\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/astracks/`,\n },\n {\n name: 'geo.filterRows',\n args: [\n {\n name: 'region',\n desc: 'Region containing the desired data points.',\n type: 'Object',\n },\n {\n name: 'minSize',\n desc: 'Minimum number of cells that cover the specified region. Default is `24`',\n type: 'Integer',\n },\n {\n name: 'maxSize',\n desc: 'Maximum number of cells that cover the specified region. Default is `-1`.',\n type: 'Object',\n },\n {\n name: 'level',\n desc: 'S2 cell level of grid cells. Default is `-1`',\n type: 'Integer',\n },\n {\n name: 's2CellIDLevel',\n desc: 'S2 Cell level used in `s2_cell_id` tag. Default is `-1`.',\n type: 'Integer',\n },\n {\n name: 'strict',\n desc: 'Enable strict geographic data filtering. Default is `true`',\n type: 'Boolean',\n },\n ],\n package: 'experimental/geo',\n desc: 'Filters data by a specified geographic region with the option of strict filtering.',\n example:\n 'geo.filterRows(region: {lat: 37.7858229, lon: -122.4058124, radius: 20.0}, strict: true)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/filterrows/`,\n },\n {\n name: 'geo.gridFilter',\n args: [\n {\n name: 'region',\n desc: 'Region containing the desired data points.',\n type: 'Object',\n },\n {\n name: 'minSize',\n desc: 'Minimum number of cells that cover the specified region. Default is `24`',\n type: 'Integer',\n },\n {\n name: 'maxSize',\n desc: 'Maximum number of cells that cover the specified region. Default is `-1`.',\n type: 'Object',\n },\n {\n name: 'level',\n desc: 'S2 cell level of grid cells. Default is `-1`',\n type: 'Integer',\n },\n {\n name: 's2CellIDLevel',\n desc: 'S2 Cell level used in `s2_cell_id` tag. Default is `-1`.',\n type: 'Integer',\n },\n ],\n package: 'experimental/geo',\n desc: 'Filters data by a specified geographic region using S2 geometry grid cells.',\n example:\n 'geo.gridFilter(region: {lat: 37.7858229, lon: -122.4058124, radius: 20.0})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/gridfilter/`,\n },\n {\n name: 'geo.groupByArea',\n args: [\n {\n name: 'newColumn',\n desc: 'Name of the new column that stores the unique identifier for a geographic area.',\n type: 'String',\n },\n {\n name: 'level',\n desc: 'S2 Cell level used to determine the size of each geographic area.',\n type: 'Integer',\n },\n {\n name: 's2cellIDLevel',\n desc: 'S2 Cell level used in `s2_cell_id` tag. Default is `-1`.',\n type: 'Integer',\n },\n ],\n package: 'experimental/geo',\n desc: 'Groups rows by geographic area using S2 geometry grid cells.',\n example: 'geo.groupByArea(newColumn: \"geoArea\", level: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/groupbyarea/`,\n },\n {\n name: 'geo.s2CellIDToken',\n args: [\n {\n name: 'point',\n desc: 'Longitude and latitude in decimal degrees (WGS 84) to use when generating the S2 cell ID token. Object must contain `lat` and `lon` properties.',\n type: 'Object',\n },\n {\n name: 'token',\n desc: 'S2 cell ID token to update.',\n type: 'String',\n },\n {\n name: 'level',\n desc: 'S2 cell level to use when generating the S2 cell ID token.',\n type: 'Integer',\n },\n ],\n package: 'experimental/geo',\n desc: 'Returns an S2 cell ID token.',\n example:\n 'geo.s2CellIDToken(point: {lat: 37.7858229, lon: -122.4058124}, level: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/s2cellidtoken/`,\n },\n {\n name: 'geo.s2CellLatLon',\n args: [\n {\n name: 'token',\n desc: 'S2 cell ID token.',\n type: 'String',\n },\n ],\n package: 'experimental/geo',\n desc: 'Returns the latitude and longitude of the center of an S2 cell.',\n example: 'geo.s2CellLatLon(token: \"89c284\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/s2celllatlon/`,\n },\n {\n name: 'geo.shapeData',\n args: [\n {\n name: 'latField',\n desc: 'Name of existing latitude field.',\n type: 'String',\n },\n {\n name: 'lonField',\n desc: 'Name of existing longitude field.',\n type: 'String',\n },\n {\n name: 'level',\n desc: 'S2 cell level to use when generating the S2 cell ID token.',\n type: 'Integer',\n },\n ],\n package: 'experimental/geo',\n desc: 'Renames existing latitude and longitude fields to `lat` and `lon` and adds an `s2_cell_id` tag.',\n example:\n 'geo.shapeData(latField: \"latitude\", lonField: \"longitude\", level: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/shapedata/`,\n },\n {\n name: 'geo.ST_Contains',\n args: [\n {\n name: 'region',\n desc: 'Region to test.',\n type: 'Object',\n },\n {\n name: 'geometry',\n desc: 'GIS geometry to test. Can be either point or linestring geometry.',\n type: 'Object',\n },\n ],\n package: 'experimental/geo',\n desc: 'Tests if the region contains the GIS geometry.',\n example:\n 'geo.ST_Contains(region: {lat: 40.7, lon: -73.3, radius: 20.0}, geometry: {lon: 39.7515, lat: 15.08433})',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_contains/`,\n },\n {\n name: 'geo.ST_Distance',\n args: [\n {\n name: 'region',\n desc: 'Region to test.',\n type: 'Object',\n },\n {\n name: 'geometry',\n desc: 'GIS geometry to test. Can be either point or linestring geometry.',\n type: 'Object',\n },\n ],\n package: 'experimental/geo',\n desc: 'Returns the distance between the region and GIS geometry.',\n example:\n 'geo.ST_Distance(region: {lat: 40.7, lon: -73.3, radius: 20.0}, geometry: {lon: 39.7515, lat: 15.08433})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_distance/`,\n },\n {\n name: 'geo.ST_DWithin',\n args: [\n {\n name: 'region',\n desc: 'Region to test.',\n type: 'Object',\n },\n {\n name: 'geometry',\n desc: 'GIS geometry to test. Can be either point or linestring geometry.',\n type: 'Object',\n },\n {\n name: 'distance',\n desc: 'Maximum distance allowed between the region and geometry.',\n type: 'Float',\n },\n ],\n package: 'experimental/geo',\n desc: 'Tests if a region is within a specified distance from GIS geometry.',\n example:\n 'geo.ST_DWithin(region: {lat: 40.7, lon: -73.3, radius: 20.0}, geometry: {lon: 39.7515, lat: 15.08433}, distance: 1000.0)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_dwithin/`,\n },\n {\n name: 'geo.ST_Intersects',\n args: [\n {\n name: 'region',\n desc: 'Region to test.',\n type: 'Object',\n },\n {\n name: 'geometry',\n desc: 'GIS geometry to test. Can be either point or linestring geometry.',\n type: 'Object',\n },\n ],\n package: 'experimental/geo',\n desc: 'Tests if a region intersects with GIS geometry.',\n example:\n 'geo.ST_Intersects(region: {lat: 40.7, lon: -73.3, radius: 20.0}, geometry: {linestring: \"39.7515 14.01433, 38.3527 13.9228, 36.9978 15.08433\"})',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_intersects/`,\n },\n {\n name: 'geo.ST_Length',\n args: [\n {\n name: 'geometry',\n desc: 'GIS geometry to test. Can be either point or linestring geometry.',\n type: 'Object',\n },\n ],\n package: 'experimental/geo',\n desc: 'Returns the spherical length of GIS geometry.',\n example:\n 'geo.ST_Length(geometry: {linestring: \"39.7515 14.01433, 38.3527 13.9228, 36.9978 15.08433\"})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_length/`,\n },\n {\n name: 'geo.ST_LineString',\n args: [],\n package: 'experimental/geo',\n desc: 'Converts a series of geographic points into linestring',\n example: 'geo.ST_LineString()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/st_linestring/`,\n },\n {\n name: 'geo.strictFilter',\n args: [\n {\n name: 'region',\n desc: 'Region containing the desired data points.',\n type: 'Object',\n },\n ],\n package: 'experimental/geo',\n desc: 'Filters data by latitude and longitude in a specified region.',\n example:\n 'geo.strictFilter(region: {lat: 37.7858229, lon: -122.4058124, radius: 20.0})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/strictfilter/`,\n },\n {\n name: 'geo.toRows',\n args: [],\n package: 'experimental/geo',\n desc: 'Pivots geo-temporal data into row-wise sets based on time and other correlation columns.',\n example: 'geo.toRows()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/geo/torows/`,\n },\n {\n name: 'getColumn',\n args: [\n {\n name: 'column',\n desc: 'The name of the column to extract.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Extracts a column from a table given its label. If the label is not present in the set of columns, the function errors.',\n example: 'getColumn(column: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stream-table/getcolumn/`,\n },\n {\n name: 'getRecord',\n args: [\n {\n name: 'idx',\n desc: 'The index of the record to extract.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Extracts a record from a table given the record’s index. If the index is out of bounds, the function errors.',\n example: 'getRecord(idx: 0)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stream-table/getrecord/`,\n },\n {\n name: 'group',\n args: [\n {\n name: 'columns',\n desc: 'List of columns to use in the grouping operation. Defaults to `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'mode',\n desc: 'The mode used to group columns. The following options are available: by, except. Defaults to `\"by\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Groups records based on their values for specific columns. It produces tables with new group keys based on provided properties.',\n example: 'group(columns: [\"host\", \"_measurement\"], mode:\"by\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/group/`,\n },\n {\n name: 'highestAverage',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the top `n` records from all groups using the average of each group.',\n example: 'highestAverage(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/highestaverage/`,\n },\n {\n name: 'highestCurrent',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the top `n` records from all groups using the last value of each group.',\n example: 'highestCurrent(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/highestcurrent/`,\n },\n {\n name: 'highestMax',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the top `n` records from all groups using the maximum of each group.',\n example: 'highestMax(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/highestmax/`,\n },\n {\n name: 'histogram',\n args: [\n {\n name: 'column',\n desc: 'The name of a column containing input data values. The column type must be float. Defaults to `\"_value\"`.',\n type: 'Strings',\n },\n {\n name: 'upperBoundColumn',\n desc: 'The name of the column in which to store the histogram\\'s upper bounds. Defaults to `\"le\"`.',\n type: 'String',\n },\n {\n name: 'countColumn',\n desc: 'The name of the column in which to store the histogram counts. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'bins',\n desc: 'A list of upper bounds to use when computing the histogram frequencies. Each element in the array should contain a float value that represents the maximum value for a bin.',\n type: 'Array of Floats',\n },\n {\n name: 'normalize',\n desc: 'When `true`, will convert the counts into frequency values between 0 and 1. Defaults to `false`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Approximates the cumulative distribution function of a dataset by counting data frequencies for a list of buckets.',\n example:\n 'histogram(column: \"_value\", upperBoundColumn: \"le\", countColumn: \"_value\", bins: [50.0, 75.0, 90.0], normalize: false)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/histogram/`,\n },\n {\n name: 'histogramQuantile',\n args: [\n {\n name: 'quantile',\n desc: 'A value between 0 and 1 indicating the desired quantile to compute.',\n type: 'Float',\n },\n {\n name: 'countColumn',\n desc: 'The name of the column in which to store the histogram counts. The count column type must be float. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'upperBoundColumn',\n desc: 'The name of the column in which to store the histogram\\'s upper bounds. The count column type must be float. Defaults to `\"le\"`.',\n type: 'String',\n },\n {\n name: 'valueColumn',\n desc: 'The name of the output column which will contain the computed quantile. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'minValue',\n desc: '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`.',\n type: 'Float',\n },\n ],\n package: '',\n desc: 'Approximates a quantile given a histogram that approximates the cumulative distribution of the dataset.',\n example:\n 'histogramQuantile(quantile: 0.5, countColumn: \"_value\", upperBoundColumn: \"le\", valueColumn: \"_value\", minValue: 0.0)',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/histogramquantile/`,\n },\n {\n name: 'holtWinters',\n args: [\n {\n name: 'n',\n desc: 'Number of values to predict.',\n type: 'Integer',\n },\n {\n name: 'seasonality',\n desc: 'Number of points in a season. Defaults to `0`.',\n type: 'Integer',\n },\n {\n name: 'interval',\n desc: 'The interval between two data points.',\n type: 'Duration',\n },\n {\n name: 'withFit',\n desc: 'Returns \"fitted\" data points in results when `withFit` is set to `true`. Defaults to `false`.',\n type: 'Boolean',\n },\n {\n name: 'timeColumn',\n desc: 'The time column to use. Defaults to `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'column',\n desc: 'The column to operate on. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Applies the Holt-Winters forecasting method to input tables. The Holt-Winters method predicts `n` seasonally-adjusted values for the specified `column` at the specified `interval`.',\n example: 'holtWinters(n: 10, interval: 1d)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/holtwinters/`,\n },\n {\n name: 'hourSelection',\n args: [\n {\n name: 'start',\n desc: 'The first hour of the hour range (inclusive). Hours range from `[0-23]`',\n type: 'Integer',\n },\n {\n name: 'stop',\n desc: 'The last hour of the hour range (inclusive). Hours range from `[0-23]`.',\n type: 'Integer`',\n },\n {\n name: 'timeColumn',\n desc: 'The column that contains the time value. Default is `\"_time\"`.',\n type: 'String`',\n },\n ],\n package: '',\n desc: 'Retains all rows with time values in a specified hour range. Hours are specified in military time.',\n example: 'hourSelection(start: 9, stop: 17)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/hourselection/`,\n },\n {\n name: 'http.basicAuth',\n args: [\n {\n name: 'u',\n desc: 'The username to use in the basic authentication header.',\n type: 'String',\n },\n {\n name: 'p',\n desc: 'The password to use in the basic authentication header.',\n type: 'String',\n },\n ],\n package: 'http',\n desc: 'Returns a Base64-encoded basic authentication header using a specified username and password combination.',\n example: `http.basicAuth(\n u: \"username\",\n p: \"passw0rd\"\n)`,\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/http/basicauth/`,\n },\n {\n name: 'http.endpoint',\n args: [\n {\n name: 'url',\n desc: 'The URL to POST to.',\n type: 'String',\n },\n ],\n package: 'http',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = http.endpoint(\n url: \"http://localhost:1234/\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/http/endpoint/`,\n },\n {\n name: 'http.get',\n args: [\n {\n name: 'url',\n desc: 'The URL to send the GET request to.',\n type: 'String',\n },\n {\n name: 'headers',\n desc: 'Headers to include with the GET request.',\n type: 'Object',\n },\n {\n name: 'timeout',\n desc: 'Timeout for the GET request. Default is `30s`.',\n type: 'Duration',\n },\n ],\n package: 'experimental/http',\n desc: 'Submits an HTTP GET request to the specified URL and returns the HTTP status code, response body, and response headers.',\n example:\n 'http.get(url: \"https://docs.influxdata.com/influxdb/v2.0/\", headers: {foo: \"bar\"})',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/http/get/`,\n },\n {\n name: 'http.pathEscape',\n args: [\n {\n name: 'inputString',\n desc: 'The string to escape.',\n type: 'String',\n },\n ],\n package: 'http',\n desc: 'Escapes special characters in a string and replaces non-ASCII characters with hexadecimal representations (%XX).',\n example: 'http.pathEscape(inputString: \"/this/is/an/example-path.html\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/http/pathescape/`,\n },\n {\n name: 'http.post',\n args: [\n {\n name: 'url',\n desc: 'The URL to POST to.',\n type: 'String',\n },\n {\n name: 'headers',\n desc: 'Headers to include with the POST request.',\n type: 'Object',\n },\n {\n name: 'data',\n desc: 'The data body to include with the POST request.',\n type: 'Bytes',\n },\n ],\n package: 'http',\n desc: 'Submits an HTTP POST request to the specified URL with headers and data and returns the HTTP status code.',\n example:\n 'http.post(url: \"http://localhost:8086/\", headers: {x:\"a\", y:\"b\"}, data: bytes(v: \"body\"))',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/http/post/`,\n },\n {\n name: 'increase',\n args: [\n {\n name: 'columns',\n desc: 'List of columns to use in the operation. Defaults to `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Computes the total non-negative difference between values in a table.',\n example: 'increase(columns: [\"_value\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/increase/`,\n },\n {\n name: 'influxdb.api',\n args: [\n {\n name: 'method',\n desc: 'HTTP request method.',\n type: 'String',\n },\n {\n name: 'path',\n desc: 'InfluxDB API path.',\n type: 'String',\n },\n {\n name: 'host',\n desc: 'InfluxDB host URL (Required when executed outside of InfluxDB). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB host URL (Required when executed outside of InfluxDB). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'headers',\n desc: 'HTTP request headers.',\n type: 'Dictionary',\n },\n {\n name: 'query',\n desc: 'URL query parameters.',\n type: 'Dictionary',\n },\n {\n name: 'timeout',\n desc: 'HTTP request timeout. Default is `30s`.',\n type: 'Duration',\n },\n {\n name: 'body',\n desc: 'HTTP request body as bytes.',\n type: 'Bytes',\n },\n ],\n package: 'experimental/influxdb',\n desc: 'Submits an HTTP request to the specified InfluxDB API path and returns a record containing the HTTP status code, response headers, and response body as a byte array.',\n example: `influxdb.api(\n method: \"get\",\n path: \"/example\",\n host: \"http://localhost:8086\",\n token: \"mySupeR53cre7t0k3n\",\n headers: [\"header1\": \"header1Value\", \"header2\": \"header2Value\"],\n query: [\"ex1\": \"example1\", \"ex2\": \"example2\"],\n timeout: 30s,\n body: bytes(v: \"Example body\")\n)`,\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/influxdb/api/`,\n },\n {\n name: 'influxdb.cardinality',\n args: [\n {\n name: 'bucket',\n desc: 'Bucket to query cardinality from.',\n type: 'String',\n },\n {\n name: 'bucketID',\n desc: 'Bucket ID to query cardinality from.',\n type: 'String',\n },\n {\n name: 'org',\n desc: 'InfluxDB organization.',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'InfluxDB organization ID.',\n type: 'String',\n },\n {\n name: 'host',\n desc: 'URL of the InfluxDB instance to query.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB authorization token.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'The earliest time to include when calculating cardinality.',\n type: 'Duration | Time',\n },\n {\n name: 'stop',\n desc: 'The latest time to include when calculating cardinality.',\n type: 'Duration | Time',\n },\n {\n name: 'predicate',\n desc: 'Predicate function that filters records. Default is `(r) => true.`',\n type: 'Function',\n },\n ],\n package: 'influxdata/influxdb',\n desc: 'Returns the series cardinality of data in InfluxDB.',\n example: 'influxdb.cardinality(bucket: \"example-bucket\", start: -1h)',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb/cardinality/`,\n },\n {\n name: 'influxdb.select',\n args: [\n {\n name: 'from',\n desc: 'Name of the bucket to query.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'Earliest time to include in results. Results include points that match the specified start time.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'Latest time to include in results. Results exclude points that match the specified stop time.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'm',\n desc: 'Name of the measurement to query.',\n type: 'String',\n },\n {\n name: 'fields',\n desc: 'List of fields to query. Returns all fields when list is empty or unspecified. Defaults to `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'where',\n desc: 'A single argument predicate function that evaluates true or false and filters results based on tag values. Defaults to `(r) => true`.',\n type: 'Function',\n },\n {\n name: 'host',\n desc: 'URL of the InfluxDB instance to query. See InfluxDB URLs.',\n type: 'String',\n },\n {\n name: 'org',\n desc: 'Organization name.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB authentication token.',\n type: 'String',\n },\n ],\n package: 'contrib/jsternberg/influxdb',\n desc: 'an alternate implementation of `from()`, `range()`, `filter()` and `pivot()` that returns pivoted query results and masks the `_measurement`, `_start`, and `_stop` columns.',\n example: `influxdb.select(\n from: \"example-bucket\",\n start: -1d,\n stop: now(),\n m: \"example-measurement\",\n fields: [],\n where: (r) => true,\n host: \"https://example.com\",\n org: \"example-org\",\n token: \"MySuP3rSecr3Tt0k3n\"\n)`,\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/influxdb/select/`,\n },\n {\n name: 'int',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'Boolean | Duration | Float | Numeric String | Time | Uinteger',\n },\n ],\n package: '',\n desc: 'Converts a single value to a integer.',\n example: 'int(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/int/`,\n },\n {\n name: 'integral',\n args: [\n {\n name: 'unit',\n desc: 'The time duration used when computing the integral.',\n type: 'Duration',\n },\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'timeColumn',\n desc: 'Column that contains time values to use in the operation. Defaults to `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'interpolate',\n desc: 'Type of interpolation to use. Defaults to `\"\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the area under the curve per unit of time of subsequent non-null records. The curve is defined using `_time` as the domain and record values as the range.',\n example: 'integral(unit: 10s, column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/integral/`,\n },\n {\n name: 'interpolate.linear',\n args: [\n {\n name: 'every',\n desc: 'Duration of time between interpolated points.',\n type: 'Duration',\n },\n ],\n package: 'interpolate',\n desc: 'Inserts rows at regular intervals using linear interpolation to determine values for inserted rows.',\n example: 'interpolate.linear(every: 1m)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/interpolate/linear/`,\n },\n {\n name: 'join',\n args: [\n {\n name: 'tables',\n desc: 'The map of streams to be joined.',\n type: 'Object',\n },\n {\n name: 'on',\n desc: 'The list of columns on which to join.',\n type: 'Array of Strings',\n },\n {\n name: 'method',\n desc: 'The method used to join. Possible values are: `inner`, `cross`, `left`, `right`, or `full`. Defaults to `\"inner\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Merges two or more input streams, whose values are equal on a set of common columns, into a single output stream. The resulting schema is the union of the input schemas. The resulting group key is the union of the input group keys.',\n example:\n 'join(tables: {key1: table1, key2: table2}, on: [\"_time\", \"_field\"], method: \"inner\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/join/`,\n },\n {\n name: 'json.encode',\n args: [\n {\n name: 'v',\n desc: 'The value to encode.',\n type: 'Boolean | Duration | Float | Integer | String | Time | UInteger',\n },\n ],\n package: 'json',\n desc: 'Converts a value into JSON bytes.',\n example: 'json.encode(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/json/encode/`,\n },\n {\n name: 'json.parse',\n args: [\n {\n name: 'data',\n desc: 'JSON data to parse.',\n type: 'Bytes',\n },\n ],\n package: 'experimental/json',\n desc: 'Takes JSON data as bytes and returns a value.',\n example: 'json.parse(data: bytes(v: \"{\"a\":1,\"b\":2,\"c\":3}\"))',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/json/parse/`,\n },\n {\n name: 'kaufmansAMA',\n args: [\n {\n name: 'n',\n desc: 'The period or number of points to use in the calculation.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'The column to operate on. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Calculates Kaufman’s Adaptive Moving Average (KAMA) using values in an input table.',\n example: 'kaufmansAMA(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/kaufmansama/`,\n },\n {\n name: 'kaufmansER',\n args: [\n {\n name: 'n',\n desc: 'The period or number of points to use in the calculation.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Calculates the Kaufman’s Efficiency Ratio (KER) using values in an input table.',\n example: 'kaufmansER(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/kaufmanser/`,\n },\n {\n name: 'keep',\n args: [\n {\n name: 'columns',\n desc: 'Columns that should be included in the resulting table. Cannot be used with `fn`.',\n type: 'Array of Strings',\n },\n {\n name: 'fn',\n desc: 'A predicate function which takes a column name as a parameter and returns a boolean indicating whether or not the column should be removed from the table. Cannot be used with `columns`.',\n type: 'Function',\n },\n ],\n package: '',\n desc: '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`.',\n example: 'keep(columns: [\"col1\", \"col2\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/keep/`,\n },\n {\n name: 'keys',\n args: [\n {\n name: 'column',\n desc: 'Column is the name of the output column to store the group key labels. Defaults to `_value`.',\n type: 'String',\n },\n ],\n package: '',\n desc: \"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.\",\n example: 'keys(column: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/keys/`,\n },\n {\n name: 'keyValues',\n args: [\n {\n name: 'keyColumns',\n desc: 'A list of columns from which values are extracted. All columns indicated must be of the same type.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: \"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.\",\n example: 'keyValues(keyColumns: [\"usage_idle\", \"usage_user\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/keyvalues/`,\n },\n {\n name: 'last',\n args: [],\n package: '',\n desc: 'Selects the last non-null record from an input table.',\n example: 'last()',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/last/`,\n },\n {\n name: 'length',\n args: [\n {\n name: 'arr',\n desc: 'The array to evaluate.',\n type: 'Array',\n },\n ],\n package: '',\n desc: 'Returns the number of items in an array.',\n example: 'length(arr: [\"john\"])',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/length/`,\n },\n {\n name: 'limit',\n args: [\n {\n name: 'n',\n desc: 'The maximum number of records to output.',\n type: 'Integer',\n },\n {\n name: 'offset',\n desc: 'The number of records to skip at the beginning of a table before limiting to `n`. Defaults to `0`.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Limits each output table to the first `n` records, excluding the offset.',\n example: 'limit(n:10, offset: 0)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/limit/`,\n },\n {\n name: 'linearBins',\n args: [\n {\n name: 'start',\n desc: 'The first value in the returned list.',\n type: 'Float',\n },\n {\n name: 'width',\n desc: 'The distance between subsequent bin values.',\n type: 'Float',\n },\n {\n name: 'count',\n desc: 'The number of bins to create.',\n type: 'Integer',\n },\n {\n name: 'infinity',\n desc: 'When `true`, adds an additional bin with a value of positive infinity. Defaults to `true`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Generates a list of linearly separated floats.',\n example: 'linearBins(start: 0.0, width: 5.0, count: 20, infinity: true)',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/linearbins/`,\n },\n {\n name: 'logarithmicBins',\n args: [\n {\n name: 'start',\n desc: 'The first value in the returned list.',\n type: 'Float',\n },\n {\n name: 'factor',\n desc: 'The multiplier applied to each subsequent bin.',\n type: 'Float',\n },\n {\n name: 'count',\n desc: 'The number of bins to create.',\n type: 'Integer',\n },\n {\n name: 'infinity',\n desc: 'When `true`, adds an additional bin with a value of positive infinity. Defaults to `true`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: 'Generates a list of exponentially separated floats.',\n example:\n 'logarithmicBins(start: 1.0, factor: 2.0, count: 10, infinity: true)',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/logarithmicbins/`,\n },\n {\n name: 'lowestAverage',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the bottom `n` records from all groups using the average of each group.',\n example: 'lowestAverage(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/lowestaverage/`,\n },\n {\n name: 'lowestCurrent',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the bottom `n` records from all groups using the last value of each group.',\n example: 'lowestCurrent(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/lowestcurrent/`,\n },\n {\n name: 'lowestMin',\n args: [\n {\n name: 'n',\n desc: 'Number of records to return.',\n type: 'Integer',\n },\n {\n name: 'column',\n desc: 'Column by which to sort. Default is `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'groupColumns',\n desc: 'The columns on which to group before performing the aggregation. Default is `[]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Returns the bottom `n` records from all groups using the maximum of each group.',\n example: 'lowestMin(n:10, groupColumns: [\"host\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/lowestmin/`,\n },\n {\n name: 'map',\n args: [\n {\n name: 'fn',\n desc: 'A single argument function that to apply to each record. The return value must be an object.',\n type: 'Function',\n },\n ],\n package: '',\n desc: 'Applies a function to each record in the input tables.',\n example: 'map(fn: (r) => ({ r with _value: r._value * r._value }))',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/map/`,\n },\n MATH_ABS,\n {\n name: 'math.acos',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the arccosine of x in radians.',\n example: 'math.acos(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/acos/`,\n },\n {\n name: 'math.acosh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation. Should be greater than 1.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the inverse hyperbolic cosine of x.',\n example: 'math.acosh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/acosh/`,\n },\n {\n name: 'math.asin',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation. Should be greater than -1 and less than 1.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the arcsine of x in radians.',\n example: 'math.asin(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/asin/`,\n },\n {\n name: 'math.asinh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the inverse hyperbolic sine of x.',\n example: 'math.asinh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/asinh/`,\n },\n {\n name: 'math.atan',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the arctangent of x in radians.',\n example: 'math.atan(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/atan/`,\n },\n {\n name: 'math.atan2',\n args: [\n {\n name: 'y',\n desc: 'The y coordinate used in the operation.',\n type: 'Float',\n },\n {\n name: 'x',\n desc: 'The x coordinate used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the arc tangent of y/x, using the signs of the two to determine the quadrant of the return value.',\n example: 'math.atan2(y: r.y_coord, x: r.x_coord)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/atan2/`,\n },\n {\n name: 'math.atanh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation. Should be greater than -1 and less than 1.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the inverse hyperbolic tangent of x.',\n example: 'math.atanh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/atanh/`,\n },\n {\n name: 'math.cbrt',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the cube root of x.',\n example: 'math.cbrt(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/cbrt/`,\n },\n {\n name: 'math.ceil',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the least integer value greater than or equal to x.',\n example: 'math.ceil(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/ceil/`,\n },\n {\n name: 'math.copysign',\n args: [\n {\n name: 'x',\n desc: 'The magnitude used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The sign used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns a value with the magnitude of x and the sign of y.',\n example: 'math.copysign(x: r._magnitude, r._sign)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/copysign/`,\n },\n {\n name: 'math.cos',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the cosine of the radian argument x.',\n example: 'math.cos(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/cos/`,\n },\n {\n name: 'math.cosh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the hyperbolic cosine of x.',\n example: 'math.cosh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/cosh/`,\n },\n {\n name: 'math.dim',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the maximum of (x - y) or 0.',\n example: 'math.dim(x: r._value1, y: r._value2)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/dim/`,\n },\n {\n name: 'math.erf',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the error function of x.',\n example: 'math.erf(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/erf/`,\n },\n {\n name: 'math.erfc',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the complementary error function of x.',\n example: 'math.erfc(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/erfc/`,\n },\n {\n name: 'math.erfcinv',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation. Should be greater than 0 and less than 2.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the inverse of `math.erfc()`.',\n example: 'math.erfcinv(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/erfcinv/`,\n },\n {\n name: 'math.erfinv',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation. Should be greater than -1 and less than 1.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the inverse error function of x.',\n example: 'math.erfinv(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/erfinv/`,\n },\n {\n name: 'math.exp',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the base-e exponential of x (`e**x`).',\n example: 'math.exp(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/exp/`,\n },\n {\n name: 'math.exp2',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the base-2 exponential of x (`2**x`).',\n example: 'math.exp2(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/exp2/`,\n },\n {\n name: 'math.expm1',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the base-e exponential of x minus 1 (`e**x - 1`).',\n example: 'math.expm1(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/expm1/`,\n },\n {\n name: 'math.float64bits',\n args: [\n {\n name: 'f',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the IEEE 754 binary representation of f, with the sign bit of f and the result in the same bit position.',\n example: 'math.float64bits(f: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/float64bits/`,\n },\n MATH_FLOOR,\n {\n name: 'math.frexp',\n args: [\n {\n name: 'f',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Breaks f into a normalized fraction and an integral power of two.',\n example: 'math.frexp(f: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/frexp/`,\n },\n {\n name: 'math.gamma',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the Gamma function of x.',\n example: 'math.gamma(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/gamma/`,\n },\n {\n name: 'math.hypot',\n args: [\n {\n name: 'p',\n desc: 'The p value used in the operation.',\n type: 'Float',\n },\n {\n name: 'q',\n desc: 'The q value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the square root of `p*p + q*q`, taking care to avoid overflow and underflow.',\n example: 'math.hypot(p: r.opp, p: r.adj)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/hypot/`,\n },\n {\n name: 'math.ilogb',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the binary exponent of x as an integer.',\n example: 'math.ilogb(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/ilogb/`,\n },\n {\n name: 'math.isInf',\n args: [\n {\n name: 'f',\n desc: 'The value used in the evaluation.',\n type: 'Float',\n },\n {\n name: 'sign',\n desc: 'The sign used in the evaluation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Reports whether f is an infinity, according to sign.',\n example: 'math.isInf(f: r._value, sign: r.sign)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/isinf/`,\n },\n {\n name: 'math.isNaN',\n args: [\n {\n name: 'f',\n desc: 'The value used in the evaluation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Reports whether f is an IEEE 754 NaN value.',\n example: 'math.isNaN(f: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/isnan/`,\n },\n {\n name: 'math.j0',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-zero Bessel function of the first kind.',\n example: 'math.j0(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/j0/`,\n },\n {\n name: 'math.j1',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-one Bessel function of the first kind.',\n example: 'math.j1(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/j1/`,\n },\n {\n name: 'math.jn',\n args: [\n {\n name: 'n',\n desc: 'The order number.',\n type: 'Float',\n },\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-n Bessel function of the first kind.',\n example: 'math.jn(n: 2, x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/jn/`,\n },\n {\n name: 'math.ldexp',\n args: [\n {\n name: 'frac',\n desc: 'The fraction used in the operation.',\n type: 'Float',\n },\n {\n name: 'exp',\n desc: 'The exponent used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns `frac × 2**exp`. It is the inverse of `math.frexp()`.',\n example: 'math.ldexp(frac: r.frac, exp: r.exp)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/ldexp/`,\n },\n {\n name: 'math.lgamma',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the natural logarithm and sign (-1 or +1) of `math.gamma(x:x)`.',\n example: 'math.lgamma(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/lgamma/`,\n },\n {\n name: 'math.log',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the natural logarithm of x.',\n example: 'math.log(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/log/`,\n },\n {\n name: 'math.log10',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the decimal logarithm of `x`.',\n example: 'math.log10(x: 3.14)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/log10/`,\n },\n {\n name: 'math.log1p',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the natural logarithm of 1 plus its argument x.',\n example: 'math.log1p(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/log1p/`,\n },\n {\n name: 'math.log2',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the binary logarithm of x.',\n example: 'math.log2(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/log2/`,\n },\n {\n name: 'math.logb',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the binary exponent of x.',\n example: 'math.logb(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/logb/`,\n },\n {\n name: 'math.mInf',\n args: [\n {\n name: 'sign',\n desc: 'The sign value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns positive infinity if `sign >= 0`, negative infinity if `sign < 0`.',\n example: 'math.mInf(sign: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/minf/`,\n },\n {\n name: 'math.mMax',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the larger of x or y.',\n example: 'math.mMax(x: r.x_value, y: r.y_value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/mmax/`,\n },\n {\n name: 'math.mMin',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the smaller of x or y.',\n example: 'math.mMin(x: r.x_value, y: r.y_value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/mmin/`,\n },\n {\n name: 'math.mod',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the floating-point remainder of x/y.',\n example: 'math.mod(x: r.x_value, y: r.y_value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/mod/`,\n },\n {\n name: 'math.modf',\n args: [\n {\n name: 'f',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns integer and fractional floating-point numbers that sum to f. Both values have the same sign as f.',\n example: 'math.modf(f: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/modf/`,\n },\n {\n name: 'math.NaN',\n args: [],\n package: 'math',\n desc: 'Returns an IEEE 754 NaN value.',\n example: 'math.NaN()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/nan/`,\n },\n {\n name: 'math.nextafter',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the next representable float value after x towards y.',\n example: 'math.nextafter(x: r.x_value, y: r.y_value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/nextafter/`,\n },\n {\n name: 'math.pow',\n args: [\n {\n name: 'x',\n desc: 'The X value used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The Y value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the base-x exponential of y, `x**y`.',\n example: 'math.pow(x: r.x_value, y: r.y_value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/pow/`,\n },\n {\n name: 'math.pow10',\n args: [\n {\n name: 'n',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the base-10 exponential of n, `10**n`.',\n example: 'math.pow10(n: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/pow10/`,\n },\n {\n name: 'math.remainder',\n args: [\n {\n name: 'x',\n desc: 'The numerator used in the operation.',\n type: 'Float',\n },\n {\n name: 'y',\n desc: 'The denominator used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the IEEE 754 floating-point remainder of `x / y`.',\n example: 'math.remainder(x: r.numerator, y: r.denominator)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/remainder/`,\n },\n {\n name: 'math.round',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the nearest integer, rounding half away from zero.',\n example: 'math.round(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/round/`,\n },\n {\n name: 'math.roundtoeven',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the nearest integer, rounding ties to even.',\n example: 'math.roundtoeven(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/roundtoeven/`,\n },\n {\n name: 'math.signbit',\n args: [\n {\n name: 'x',\n desc: 'The value used in the evaluation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Reports whether x is negative or negative zero.',\n example: 'math.signbit(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/signbit/`,\n },\n {\n name: 'math.sin',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the sine of the radian argument x.',\n example: 'math.sin(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/sin/`,\n },\n {\n name: 'math.sincos',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the values of `math.sin(x:x)` and `math.cos(x:x)`.',\n example: 'math.sincos(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/sincos/`,\n },\n {\n name: 'math.sinh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the hyperbolic sine of x.',\n example: 'math.sinh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/sinh/`,\n },\n {\n name: 'math.sqrt',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the square root of x.',\n example: 'math.sqrt(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/sqrt/`,\n },\n {\n name: 'math.tan',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the tangent of the radian argument x.',\n example: 'math.tan(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/tan/`,\n },\n {\n name: 'math.tanh',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the hyperbolic tangent of x.',\n example: 'math.tanh(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/tanh/`,\n },\n {\n name: 'math.trunc',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the integer value of x.',\n example: 'math.trunc(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/trunc/`,\n },\n {\n name: 'math.y0',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-zero Bessel function of the second kind.',\n example: 'math.y0(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/y0/`,\n },\n {\n name: 'math.y1',\n args: [\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-one Bessel function of the second kind.',\n example: 'math.y1(x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/y1/`,\n },\n {\n name: 'math.yn',\n args: [\n {\n name: 'n',\n desc: 'The order number used in the operation.',\n type: 'Float',\n },\n {\n name: 'x',\n desc: 'The value used in the operation.',\n type: 'Float',\n },\n ],\n package: 'math',\n desc: 'Returns the order-n Bessel function of the second kind.',\n example: 'math.yn(n: 3, x: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/math/yn/`,\n },\n {\n name: 'max',\n args: [\n {\n name: 'column',\n desc: 'The column to use to compute the max. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Selects record with the highest `_value` from the input table.',\n example: 'max()',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/max/`,\n },\n MEAN,\n {\n name: 'median',\n args: [\n {\n name: 'column',\n desc: 'The column on which to compute the mean. Defaults to `\"_value\"`',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Returns the median `_value` of an input table. The `median()` function can only be used with float value types.',\n example: 'median(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/median/`,\n },\n {\n name: 'min',\n args: [\n {\n name: 'column',\n desc: 'The column to use to compute the min. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Selects record with the lowest `_value` from the input table.',\n example: 'min()',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/min/`,\n },\n {\n name: 'mode',\n args: [\n {\n name: 'column',\n desc: 'The column to use to compute the mode. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the mode or value that occurs most often in a specified column.',\n example: 'mode(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/mode/`,\n },\n {\n name: 'monitor.check',\n args: [\n {\n name: 'crit',\n desc: 'Predicate function that determines `crit` status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'warn',\n desc: 'Predicate function that determines `warn` status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'info',\n desc: 'Predicate function that determines `info` status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'ok',\n desc: 'Predicate function that determines `ok` status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'messageFn',\n desc: 'A function that constructs a message to append to each row. The message is stored in the `_message` column.',\n type: 'Function',\n },\n {\n name: 'data',\n desc: 'Meta data used to identify this check.',\n type: 'Record',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Checks input data and assigns a level (`ok`, `info`, `warn`, or `crit`) to each row based on predicate functions.',\n example: `monitor.check(\n crit: (r) => r._value > 90.0,\n warn: (r) => r._value > 80.0,\n info: (r) => r._value > 60.0,\n ok: (r) => r._value <= 20.0,\n messageFn: (r) => \"The current level is \\${r._level}\",\n data: {}\n)`,\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/check/`,\n },\n {\n name: 'monitor.deadman',\n args: [\n {\n name: 't',\n desc: 'The time threshold for the deadman check.',\n type: 'Time',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Detects when a group stops reporting data. It takes a stream of tables and reports if groups have been observed since time `t`.',\n example: `monitor.deadman(t: 2019-08-30T12:30:00Z)`,\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/deadman/`,\n },\n {\n name: 'monitor.from',\n args: [\n {\n name: 'start',\n desc: 'The earliest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'The latest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'fn',\n desc: 'A single argument predicate function that evaluates `true` or `false`.',\n type: 'Function',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Detects when a group stops reporting data. It takes a stream of tables and reports if groups have been observed since time `t`.',\n example: `monitor.from(\n start: -1h,\n stop: now(),\n fn: (r) => true\n)`,\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/from/`,\n },\n {\n name: 'monitor.logs',\n args: [\n {\n name: 'start',\n desc: 'The earliest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'The latest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'fn',\n desc: 'A single argument predicate function that evaluates `true` or `false`.',\n type: 'Function',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Retrieves notification events stored in the notifications measurement in the `_monitoring` bucket.',\n example: `monitor.from(\n start: -1h,\n stop: now(),\n fn: (r) => true\n)`,\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/logs/`,\n },\n {\n name: 'monitor.notify',\n args: [\n {\n name: 'endpoint',\n desc: 'A function that constructs and sends the notification to an endpoint.',\n type: 'Function',\n },\n {\n name: 'data',\n desc: 'Notification data to append to the output.',\n type: 'Record',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Sends a notification to an endpoint and logs it in the notifications measurement in the `_monitoring` bucket.',\n example: `monitor.notify(\n endpoint: endpoint,\n data: {}\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/notify/`,\n },\n {\n name: 'monitor.stateChanges',\n args: [\n {\n name: 'fromLevel',\n desc: 'The level to detect a change from. Defaults to `\"any\"`.',\n type: 'String',\n },\n {\n name: 'toLevel',\n desc: 'The level to detect a change to. The function output records that change to this level. Defaults to `\"any\"`.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/monitor',\n desc: 'Detects state changes in a stream of data with a `_level` column and outputs records that change from `fromLevel` to `toLevel`.',\n example: `monitor.stateChanges(\n fromLevel: \"any\",\n toLevel: \"any\"\n)`,\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/statechanges/`,\n },\n {\n name: 'monitor.stateChangesOnly',\n args: [],\n package: 'influxdata/influxdb/monitor',\n desc: 'Takes a stream of tables that contains a `_level` column and returns a stream of tables where each record represents a state change.',\n example: `monitor.stateChangesOnly()`,\n category: 'Transformation',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/monitor/statechangesonly/`,\n },\n {\n name: 'movingAverage',\n args: [\n {\n name: 'n',\n desc: 'The frequency of time windows.',\n type: 'Duration',\n },\n ],\n package: '',\n desc: 'Calculates the mean of values grouped into `n` number of points.',\n example: 'movingAverage(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/movingaverage/`,\n },\n {\n name: 'mqtt.to',\n args: [\n {\n name: 'broker',\n desc: 'The MQTT broker connection string.',\n type: 'String',\n },\n {\n name: 'topic',\n desc: 'The MQTT topic to send data to.',\n type: 'String',\n },\n {\n name: 'message',\n desc: 'The message or payload to send to the MQTT broker. The default payload is an output table.',\n type: 'String',\n },\n {\n name: 'qos',\n desc: 'The MQTT Quality of Service (QoS) level. Values range from 0-2. Default is 0.',\n type: 'Integer',\n },\n {\n name: 'clientid',\n desc: 'The MQTT client ID.',\n type: 'String',\n },\n {\n name: 'username',\n desc: 'The username to send to the MQTT broker.',\n type: 'String',\n },\n {\n name: 'password',\n desc: 'The password to send to the MQTT broker.',\n type: 'String',\n },\n {\n name: 'name',\n desc: 'The name for the MQTT message.',\n type: 'String',\n },\n {\n name: 'timeout',\n desc: 'The MQTT connection timeout. Default is 1s.',\n type: 'Duration',\n },\n {\n name: 'timeColumn',\n desc: 'The column to use as time values in the output line protocol. Default is `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'tagColumns',\n desc: 'The columns to use as tag sets in the output line protocol. Default is `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'valueColumns',\n desc: 'The columns to use as field values in the output line protocol. Default is `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n ],\n package: 'experimental/mqtt',\n desc: 'Outputs data to an MQTT broker using MQTT protocol.',\n example:\n 'mqtt.to(broker: \"tcp://localhost:8883\", topic: \"example-topic\", clientid: \"exampleID\", tagColumns: [\"exampleTagKey\"], valueColumns: [\"_value\"])',\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/mqtt/to/`,\n },\n {\n name: 'now',\n args: [],\n package: '',\n desc: 'Returns the current time (UTC) or the time defined in the `now` option.',\n example: 'now()',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/now/`,\n },\n {\n name: 'oee.APQ',\n args: [\n {\n name: 'runningState',\n desc: 'State value that represents a running state.',\n type: 'String',\n },\n {\n name: 'plannedTime',\n desc: 'Total time that equipment is expected to produce parts.',\n type: 'Duration | Integer',\n },\n {\n name: 'idealCycleTime',\n desc: 'Ideal minimum time to produce one part.',\n type: 'Duration | Integer',\n },\n ],\n package: 'experimental/oee',\n desc: 'Computes availability, performance, quality (APQ) and overall equipment effectiveness (OEE) in producing parts.',\n example: `oee.APQ(\n runningState: \"running\",\n plannedTime: 8h,\n idealCycleTime: 2m\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/oee/apq/`,\n },\n {\n name: 'oee.computeAPQ',\n args: [\n {\n name: 'productionEvents',\n desc: 'Production events stream that contains the production state or start and stop events.',\n type: 'Stream of Tables',\n },\n {\n name: 'partEvents',\n desc: 'Part events that contains the running totals of parts produced and parts that do not meet quality standards.',\n type: 'Stream of Tables',\n },\n {\n name: 'runningState',\n desc: 'State value that represents a running state.',\n type: 'String',\n },\n {\n name: 'plannedTime',\n desc: 'Total time that equipment is expected to produce parts.',\n type: 'Duration | Integer',\n },\n {\n name: 'idealCycleTime',\n desc: 'Ideal minimum time to produce one part.',\n type: 'Duration | Integer',\n },\n ],\n package: 'experimental/oee',\n desc: 'Computes availability, performance, and quality (APQ) and overall equipment effectiveness (OEE) using two separate input streams—production events and part events.',\n example: `oee.computeAPQ(\n productionEvents: exampleProductionScheme,\n partEvents: examplePartsStream,\n runningState: \"running\",\n plannedTime: 8h,\n idealCycleTime: 2m,\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/oee/computeapq/`,\n },\n {\n name: 'opsgenie.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Opsgenie API URL. Defaults to `https://api.opsgenie.com/v2/alerts`.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Opsgenie API authorization key.',\n type: 'String',\n },\n {\n name: 'entity',\n desc: 'Alert entity used to specify the alert domain.',\n type: 'String',\n },\n ],\n package: 'contrib/sranka/opsgenie',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = opsgenie.endpoint(\n url: \"https://api.opsgenie.com/v2/alerts\",\n apiKey: \"YoUrSup3R5ecR37AuThK3y\",\n entity: \"example-entity\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/opsgenie/endpoint/`,\n },\n {\n name: 'opsgenie.sendAlert',\n args: [\n {\n name: 'url',\n desc: 'Opsgenie API URL. Defaults to `https://api.opsgenie.com/v2/alerts`.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Opsgenie API authorization key.',\n type: 'String',\n },\n {\n name: 'message',\n desc: 'Alert message text. 130 characters or less.',\n type: 'String',\n },\n {\n name: 'alias',\n desc: 'Opsgenie alias usee to de-deduplicate alerts. 250 characters or less. Defaults to `message`.',\n type: 'String',\n },\n {\n name: 'description',\n desc: 'Alert description. 15,000 characters or less.',\n type: 'String',\n },\n {\n name: 'priority',\n desc: 'Opsgenie alert priority. Valid values include: P1, P2, P3 (default), P4, and P5.',\n type: 'String',\n },\n {\n name: 'responders',\n desc: 'List of responder teams or users. Use the `user:` prefix for users and `teams:` prefix for teams.',\n type: 'Array of Strings',\n },\n {\n name: 'tags',\n desc: 'Alert tags.',\n type: 'String',\n },\n {\n name: 'entity',\n desc: 'Alert entity used to specify the alert domain.',\n type: 'String',\n },\n {\n name: 'actions',\n desc: 'List of actions available for the alert.',\n type: 'Array of strings',\n },\n {\n name: 'details',\n desc: 'Additional alert details. Must be a JSON-encoded map of key-value string pairs.',\n type: 'String',\n },\n {\n name: 'visibleTo',\n desc: 'List of teams and users the alert will be visible to without sending notifications. Use the `user:` prefix for users and `teams:` prefix for teams.',\n type: 'Array of strings',\n },\n ],\n package: 'contrib/sranka/opsgenie',\n desc: 'Sends an alert to Opsgenie.',\n example: `opsgenie.sendAlert(\n url: \"https://api.opsgenie.com/v2/alerts\",\n apiKey: \"YoUrSup3R5ecR37AuThK3y\",\n message: \"Example message\",\n alias: \"Example alias\",\n description: \"Example description\",\n priority: \"P3\",\n responders: [\"user:john@example.com\", \"team:itcrowd\"],\n tags: [\"tag1\", \"tag2\"],\n entity: \"example-entity\",\n actions: [\"action1\", \"action2\"],\n details: \"{}\",\n visibleTo: []\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/opsgenie/sendalert/`,\n },\n {\n name: 'pagerduty.actionFromSeverity',\n args: [\n {\n name: 'severity',\n desc: 'The severity to convert to a PagerDuty action.',\n type: 'String',\n },\n ],\n package: 'pagerduty',\n desc: 'Converts a severity to a PagerDuty action. `ok` converts to `resolve`. All other severities convert to `trigger`.',\n example: 'pagerduty.actionFromSeverity(severity: \"ok\")',\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pagerduty/actionfromseverity/`,\n },\n {\n name: 'pagerduty.dedupKey',\n args: [],\n package: 'pagerduty',\n desc: 'uses the group key of an input table to generate and store a deduplication key in the `_pagerdutyDedupKey` column.',\n example: 'pagerduty.dedupKey()',\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pagerduty/dedupkey/`,\n },\n {\n name: 'pagerduty.endpoint',\n args: [\n {\n name: 'url',\n desc: 'The PagerDuty v2 Events API URL. Defaults to `https://events.pagerduty.com/v2/enqueue`.',\n type: 'String',\n },\n ],\n package: 'pagerduty',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = pagerduty.endpoint(\n url: \"https://events.pagerduty.com/v2/enqueue\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pagerduty/endpoint/`,\n },\n {\n name: 'pagerduty.sendEvent',\n args: [\n {\n name: 'pagerdutyURL',\n desc: 'The URL of the PagerDuty endpoint. Defaults to `https://events.pagerduty.com/v2/enqueue`.',\n type: 'String',\n },\n {\n name: 'routingKey',\n desc: 'The routing key generated from your PagerDuty integration.',\n type: 'String',\n },\n {\n name: 'client',\n desc: 'The name of the client sending the alert.',\n type: 'String',\n },\n {\n name: 'clientURL',\n desc: 'The URL of the client sending the alert.',\n type: 'String',\n },\n {\n name: 'dedupkey',\n desc: 'A per-alert ID that acts as deduplication key and allows you to acknowledge or change the severity of previous messages. Supports a maximum of 255 characters.',\n type: 'String',\n },\n {\n name: 'class',\n desc: 'The class or type of the event. Classes are user-defined.',\n type: 'String',\n },\n {\n name: 'group',\n desc: 'A logical grouping used by PagerDuty. Groups are user-defined.',\n type: 'String',\n },\n {\n name: 'severity',\n desc: 'The severity of the event. Supported severities are `\"critical\"`, `\"error\"`, `\"warning\"`, `\"info\"`.',\n type: 'String',\n },\n {\n name: 'eventAction',\n desc: 'Event type to send to PagerDuty. Valid values include `\"trigger\"`, `\"resolve\"`, `\"acknowledge\"`.',\n type: 'String',\n },\n {\n name: 'source',\n desc: 'The unique location of the affected system. For example, the hostname or fully qualified domain name (FQDN).',\n type: 'String',\n },\n {\n name: 'summary',\n desc: 'A brief text summary of the event used as the summaries or titles of associated alerts. The maximum permitted length is 1024 characters.',\n type: 'String',\n },\n {\n name: 'timestamp',\n desc: 'The time the detected event occurred in RFC3339nano format.',\n type: 'String',\n },\n ],\n package: 'pagerduty',\n desc: 'Sends an alert to PagerDuty.',\n example: `pagerduty.sendEvent(\n pagerdutyURL: \"https://events.pagerduty.com/v2/enqueue\",\n routingKey: \"ExampleRoutingKey\",\n client: \"ExampleClient\",\n clientURL: \"http://examplepagerdutyclient.com\",\n dedupkey: \"ExampleDedupKey\",\n class: \"cpu usage\",\n group: \"app-stack\",\n severity: \"ok\",\n eventAction: \"trigger\",\n source: \"monitoringtool:vendor:region\",\n summary: \"This is an example summary.\",\n timestamp: \"2016-07-17T08:42:58.315+0000\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pagerduty/sendevent/`,\n },\n {\n name: 'pagerduty.severityFromLevel',\n args: [\n {\n name: 'level',\n desc: 'The level to convert to a PagerDuty severity.',\n type: 'String',\n },\n ],\n package: 'pagerduty',\n desc: 'Converts an InfluxDB status level to a PagerDuty severity.',\n example: 'pagerduty.severityFromLevel(level: \"crit\")',\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pagerduty/severityfromlevel/`,\n },\n {\n name: 'pearsonr',\n args: [\n {\n name: 'x',\n desc: 'First input stream used in the operation.',\n type: 'Object',\n },\n {\n name: 'y',\n desc: 'Second input stream used in the operation.',\n type: 'Object',\n },\n {\n name: 'on',\n desc: 'List of columns on which to join.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Computes the Pearson R correlation coefficient between two streams by first joining the streams, then performing the covariance operation normalized to compute R.',\n example: 'pearsonr(x: table1, y: table2, on: [\"_time\", \"_field\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/pearsonr/`,\n },\n {\n name: 'pivot',\n args: [\n {\n name: 'rowKey',\n desc: 'List of columns used to uniquely identify a row for the output.',\n type: 'Array of Strings',\n },\n {\n name: 'columnKey',\n desc: 'List of columns used to pivot values onto each row identified by the rowKey.',\n type: 'Array of Strings',\n },\n {\n name: 'valueColumn',\n desc: 'The single column that contains the value to be moved around the pivot.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Collects values stored vertically (column-wise) in a table and aligns them horizontally (row-wise) into logical sets.',\n example:\n 'pivot(rowKey:[\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/pivot/`,\n },\n {\n name: 'prometheus.histogramQuantile',\n args: [\n {\n name: 'quantile',\n desc: 'A value between 0.0 and 1.0 indicating the desired quantile.',\n type: 'Float',\n },\n ],\n package: 'experimental/prometheus',\n desc: 'Calculates quantiles on a set of values assuming the histogram data is scraped or read from a Prometheus data source.',\n example: 'prometheus.histogramQuantile(quantile: 0.99)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/prometheus/histogramquantile/`,\n },\n {\n name: 'prometheus.scrape',\n args: [\n {\n name: 'url',\n desc: 'The URL to scrape Prometheus-formatted metrics from.',\n type: 'String',\n },\n ],\n package: 'experimental/prometheus',\n desc: 'Retrieves Prometheus-formatted metrics from a specified URL.',\n example: 'prometheus.scrape(url: \"http://localhost:9999/metrics\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/prometheus/scrape/`,\n },\n {\n name: 'pushbullet.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Pushbullet API URL. Defaults to `https://api.pushbullet.com/v2/pushes`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'Pushbullet API token to use when interacting with Pushbullet. Defaults to `\"\"`.',\n type: 'String',\n },\n ],\n package: 'pushbullet',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = pushbullet.endpoint(\n url: \"https://api.pushbullet.com/v2/pushes\",\n token: \"\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pushbullet/endpoint/`,\n },\n {\n name: 'pushbullet.pushData',\n args: [\n {\n name: 'url',\n desc: 'Pushbullet API URL. Defaults to `https://api.pushbullet.com/v2/pushes`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'Pushbullet API token to use when interacting with Pushbullet. Defaults to `\"\"`.',\n type: 'String',\n },\n {\n name: 'data',\n desc: 'Data to send to the Pushbullet API. The function JSON-encodes data before sending it to Pushbullet.',\n type: 'Record',\n },\n ],\n package: 'pushbullet',\n desc: 'Sends a push notification to the Pushbullet API.',\n example: `pushbullet.pushData(\n url: \"https://api.pushbullet.com/v2/pushes\",\n token: \"\",\n data: {\n \"type\": \"link\",\n \"title\": \"This is a notification!\",\n \"body\": \"This notification came from Flux.\",\n \"url\": \"http://example.com\"\n }\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pushbullet/pushdata/`,\n },\n {\n name: 'pushbullet.pushData',\n args: [\n {\n name: 'url',\n desc: 'Pushbullet API URL. Defaults to `https://api.pushbullet.com/v2/pushes`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'Pushbullet API token to use when interacting with Pushbullet. Defaults to `\"\"`.',\n type: 'String',\n },\n {\n name: 'title',\n desc: 'Title of the notification.',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'Text to display in the notification.',\n type: 'String',\n },\n ],\n package: 'pushbullet',\n desc: 'Sends a push notification of type `note` to the Pushbullet API.',\n example: `pushbullet.pushNote(\n url: \"https://api.pushbullet.com/v2/pushes\",\n token: \"\",\n title: \"This is a push notification!\",\n text: \"This push notification came from Flux.\"\n)`,\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/pushbullet/pushnote/`,\n },\n {\n name: 'quantile',\n args: [\n {\n name: 'column',\n desc: 'The column on which to compute the quantile. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'q',\n desc: 'A value between 0 and 1 indicating the desired quantile.',\n type: 'Float',\n },\n {\n name: 'method',\n desc: 'Defines the method of computation. The available options are: `estimate_tdigest`, `exact_mean`, or `exact_selector`.',\n type: 'String',\n },\n {\n name: 'compression',\n desc: '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.',\n type: 'Float',\n },\n ],\n package: '',\n desc: 'This is both an aggregate and selector function depending on the `method` used. 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.',\n example:\n 'quantile(column: \"_value\", q: 0.99, method: \"estimate_tdigest\", compression: 1000.0)',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/quantile/`,\n },\n {\n name: 'query.filterFields',\n args: [\n {\n name: 'fields',\n desc: 'Fields to filter by.',\n type: 'Array of Strings',\n },\n ],\n package: 'experimental/query',\n desc: 'Filters input data by field.',\n example: 'query.filterFields(fields: [\"field_name\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/query/filterfields/`,\n },\n {\n name: 'query.filterMeasurement',\n args: [\n {\n name: 'measurement',\n desc: 'Measurement to filter by.',\n type: 'String',\n },\n ],\n package: 'experimental/query',\n desc: 'Filters input data by measurement.',\n example: 'query.filterMeasurement(measurement: \"measurement_name\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/query/filtermeasurement/`,\n },\n {\n name: 'query.fromRange',\n args: [\n {\n name: 'bucket',\n desc: 'Name of the bucket to query.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'The earliest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'The latest time to include in results. Defaults to `now()`.',\n type: 'Duration | Time | Integer',\n },\n ],\n package: 'experimental/query',\n desc: 'Returns all data from a specified bucket within given time bounds.',\n example:\n 'query.fromRange(bucket: \"example-bucket\", start: v.timeRangeStart)',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/query/fromrange/`,\n },\n {\n name: 'query.inBucket',\n args: [\n {\n name: 'bucket',\n desc: 'Name of the bucket to query.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'The earliest time to include in results.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'stop',\n desc: 'The latest time to include in results. Defaults to `now()`.',\n type: 'Duration | Time | Integer',\n },\n {\n name: 'measurement',\n desc: 'Measurement to filter by.',\n type: 'String',\n },\n {\n name: 'fields',\n desc: 'Fields to filter by.',\n type: 'Array of Strings',\n },\n {\n name: 'predicate',\n desc: 'A single argument function that evaluates true or false.',\n type: 'Function',\n },\n ],\n package: 'experimental/query',\n desc: 'Queries data from a specified bucket within given time bounds, filters data by measurement, field, and optional predicate expressions.',\n example:\n 'query.inBucket(bucket: \"example-bucket\", start: v.timeRangeStart, measurement: \"measurement_name\", fields: [\"field_name\"], predicate: (r) => r.host == \"host1\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/query/inbucket/`,\n },\n RANGE,\n {\n name: 'reduce',\n args: [\n {\n name: 'fn',\n desc: 'Function to apply to each record with a reducer object. The function expects two objects: `r` and `accumulator`.',\n type: 'Function',\n },\n {\n name: 'identity',\n desc: 'Defines the reducer object and provides initial values to use when creating a reducer.',\n type: 'Object',\n },\n ],\n package: '',\n desc: 'Aggregates records in each table according to the reducer, `fn`',\n example:\n 'reduce(fn: (r, accumulator) => ({ sum: r._value + accumulator.sum }), identity: {sum: 0.0})',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/reduce/`,\n },\n {\n name: 'regexp.compile',\n args: [\n {\n name: 'v',\n desc: 'The string value to parse into a regular expression.',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Parses a string into a regular expression and returns a regexp object.',\n example: 'regexp.compile(v: \"[a-zA-Z]\")',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/compile/`,\n },\n {\n name: 'regexp.findString',\n args: [\n {\n name: 'r',\n desc: 'The regular expression used to search `v`',\n type: 'Regexp',\n },\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Returns the left-most regular expression match in a string.',\n example: 'regexp.findString(r: /foo.?/, v: \"seafood fool\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/findstring/`,\n },\n {\n name: 'regexp.findStringIndex',\n args: [\n {\n name: 'r',\n desc: 'The regular expression used to search `v`',\n type: 'Regexp',\n },\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Returns a two-element array of integers defining the beginning and ending indexes of the left-most regular expression match in a string.',\n example: 'regexp.findStringIndex(r: /ab?/, v: \"tablet\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/findstringindex/`,\n },\n {\n name: 'regexp.getString',\n args: [\n {\n name: 'r',\n desc: 'The regular expression object to convert to a string.',\n type: 'Regexp',\n },\n ],\n package: 'regexp',\n desc: 'Returns the source string used to compile a regular expression.',\n example: 'regexp.getString(r: /[a-zA-Z]/)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/getstring/`,\n },\n {\n name: 'regexp.matchRegexpString',\n args: [\n {\n name: 'r',\n desc: 'The regular expression used to search `v`',\n type: 'Regexp',\n },\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Tests if a string contains any match to a regular expression.',\n example: 'regexp.matchRegexpString(r: /(go){2}/, v: \"gogogopher\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/matchregexpstring/`,\n },\n {\n name: 'regexp.quoteMeta',\n args: [\n {\n name: 'v',\n desc: 'String value containing regular expression metacharacters to escape.',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Escapes all regular expression metacharacters inside of a string.',\n example: 'regexp.quoteMeta(v: \".+*?()|[]{}^$\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/quotemeta/`,\n },\n {\n name: 'regexp.replaceAllString',\n args: [\n {\n name: 'r',\n desc: 'The regular expression used to search `v`',\n type: 'Regexp',\n },\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The replacement for matches to `r`',\n type: 'String',\n },\n ],\n package: 'regexp',\n desc: 'Replaces all regular expression matches in a string with a specified replacement.',\n example: 'regexp.replaceAllString(r: /a(x*)b/, v: \"-ab-axxb-\", t: \"T\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/replaceallstring/`,\n },\n {\n name: 'regexp.splitRegexp',\n args: [\n {\n name: 'r',\n desc: 'The regular expression used to search `v`',\n type: 'Regexp',\n },\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'i',\n desc: 'The number of substrings to return.',\n type: 'Integer',\n },\n ],\n package: 'regexp',\n desc: 'Splits a string into substrings separated by regular expression matches and returns an array of `i` substrings between matches.',\n example: 'regexp.splitRegexp(r: /a*/, v: \"abaabaccadaaae\", i: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/regexp/splitregexp/`,\n },\n {\n name: 'relativeStrengthIndex',\n args: [\n {\n name: 'n',\n desc: 'The number of values to use to calculate the relative strength index (RSI).',\n type: 'Integer',\n },\n {\n name: 'columns',\n desc: 'Columns to operate on. Defaults to `[\"_value\"]`.',\n type: 'Array of Strings`',\n },\n ],\n package: '',\n desc: 'Measures the relative speed and change of values in an input table.',\n example: 'relativeStrengthIndex(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/relativestrengthindex/`,\n },\n {\n name: 'rename',\n args: [\n {\n name: 'columns',\n desc: 'A map of columns to rename and their corresponding new names. Cannot be used with `fn`.',\n type: 'Object',\n },\n {\n name: 'fn',\n desc: 'A function mapping between old and new column names. Cannot be used with `columns`.',\n type: 'Function',\n },\n ],\n package: '',\n desc: '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.',\n example: 'rename(columns: {host: \"server\", _field: \"my_field\"})',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/rename/`,\n },\n {\n name: 'rows.map',\n args: [\n {\n name: 'fn',\n desc: 'A single argument function to apply to each record. The return value must be a record.',\n type: 'Function',\n },\n ],\n package: 'contrib/jsternberg/rows',\n desc: 'An alternate implementation of `map()` that is faster, but more limited than `map()`.',\n example: 'rows.map( fn: (r) => ({_value: r._value * 100.0}))',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/rows/map/`,\n },\n {\n name: 'runtime.version',\n args: [],\n package: 'runtime',\n desc: 'Returns the current Flux version.',\n example: 'runtime.version()',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/runtime/version/`,\n },\n {\n name: 'sample',\n args: [\n {\n name: 'n',\n desc: 'Sample every Nth element.',\n type: 'Integer',\n },\n {\n name: 'pos',\n desc: '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).',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Selects a subset of the records from the input table.',\n example: 'sample(n:5, pos: -1)',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/sample/`,\n },\n {\n name: 'sample.data',\n args: [\n {\n name: 'set',\n desc: 'InfluxDB sample dataset to download and output.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/sample',\n desc: 'Downloads and outputs an InfluxDB sample dataset.',\n example: 'sample.data(set: \"usgs\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-sample/data/`,\n },\n {\n name: 'sample.list',\n args: [],\n package: 'influxdata/influxdb/sample',\n desc: 'Outputs information about available InfluxDB sample datasets.',\n example: 'sample.list()',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-sample/list/`,\n },\n {\n name: 'schema.fieldKeys',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket to list field keys from.',\n type: 'String',\n },\n {\n name: 'predicate',\n desc: 'Predicate function that filters field keys. Defaults is (r) => true.',\n type: 'Function',\n },\n {\n name: 'start',\n desc: 'The oldest time to include in results. Defaults is `-30d`.',\n type: 'Duration | Time',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of fields in a bucket.',\n example: 'schema.fieldKeys(bucket: \"example-bucket\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/measurementfieldkeys/`,\n },\n {\n name: 'schema.fieldsAsCols',\n args: [],\n package: 'influxdata/influxdb/schema',\n desc: 'Aligns fields within each input table that have the same timestamp.',\n example: 'schema.fieldsAsCols()',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/fieldsascols/`,\n },\n {\n name: 'schema.measurementFieldKeys',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket to list field keys from.',\n type: 'String',\n },\n {\n name: 'measurement',\n desc: 'The measurement to list field keys from.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'The oldest time to include in results. Defaults is `-30d`.',\n type: 'Duration | Time',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of fields in a measurement.',\n example:\n 'schema.measurementFieldKeys(bucket: \"example-bucket\", measurement: \"example-measurement\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/measurementfieldkeys/`,\n },\n {\n name: 'schema.measurements',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket from which to list measurements.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of measurements in a specific bucket.',\n example: 'schema.measurements(bucket: \"example-bucket\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/measurements/`,\n },\n {\n name: 'schema.measurementTagKeys',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket from which to return tag keys for a specific measurement.',\n type: 'String',\n },\n {\n name: 'measurement',\n desc: 'The measurement from which to return tag keys.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of tag keys for a specific measurement.',\n example:\n 'schema.measurementTagKeys(bucket: \"example-bucket\", measurement: \"mem\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/measurementtagkeys/`,\n },\n {\n name: 'schema.measurementTagValues',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket from which to return tag keys for a specific measurement.',\n type: 'String',\n },\n {\n name: 'measurement',\n desc: 'The measurement from which to return tag values.',\n type: 'String',\n },\n {\n name: 'tag',\n desc: 'The tag from which to return all unique values.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of tag values for a specific measurement.',\n example:\n 'schema.measurementTagValues(bucket: \"example-bucket\", measurement: \"mem\", tag: \"host\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/measurementtagvalues/`,\n },\n {\n name: 'schema.tagKeys',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket from which to list tag keys.',\n type: 'String',\n },\n {\n name: 'predicate',\n desc: 'The predicate function that filters tag keys. Defaults to `(r) => true.`',\n type: 'Function',\n },\n {\n name: 'start',\n desc: 'Specifies the oldest time to be included in the results. Defaults to `-30d`.',\n type: 'Duration | Time',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of tag keys for all series that match the predicate.',\n example: 'schema.tagKeys(bucket: \"example-bucket\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/tagkeys/`,\n },\n {\n name: 'schema.tagValues',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket from which to list tag values.',\n type: 'String',\n },\n {\n name: 'tag',\n desc: 'The tag for which to return unique values.',\n type: 'String',\n },\n {\n name: 'predicate',\n desc: 'The predicate function that filters tag values. Defaults to `(r) => true.`',\n type: 'Function',\n },\n {\n name: 'start',\n desc: 'Specifies the oldest time to be included in the results. Defaults to `-30d`.',\n type: 'Duration | Time',\n },\n ],\n package: 'influxdata/influxdb/schema',\n desc: 'Returns a list of unique values for a given tag.',\n example: 'schema.tagValues(bucket: \"example-bucket\", tag: \"example-tag\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-schema/tagvalues/`,\n },\n {\n name: 'secrets.get',\n args: [\n {\n name: 'key',\n desc: 'The secret key to retrieve.',\n type: 'String',\n },\n ],\n package: 'influxdata/influxdb/secrets',\n desc: 'Retrieves a secret from the InfluxDB secret store.',\n example: 'secrets.get(key: \"KEY_NAME\")',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/secrets/get/`,\n },\n {\n name: 'sensu.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Base URL of Sensu API without a trailing slash. Example: `http://localhost:8080`.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Sensu API Key.',\n type: 'String',\n },\n {\n name: 'handlers',\n desc: 'Sensu handlers to execute. Default is `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'namespace',\n desc: 'Sensu namespace. Default is `default`.',\n type: 'String',\n },\n {\n name: 'entityName',\n desc: 'Event source. Use alphanumeric characters, underscores (`_`), periods (`.`), and hyphens (`-`).',\n type: 'String',\n },\n ],\n package: 'contrib/sranka/sensu',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = sensu.endpoint(\n url: \"http://localhost:8080\",\n apiKey: \"mYSuP3rs3cREtApIK3Y\",\n handlers: [],\n namespace: \"default\",\n entityName: \"influxdb\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/sensu/endpoint/`,\n },\n {\n name: 'sensu.event',\n args: [\n {\n name: 'url',\n desc: 'Base URL of Sensu API without a trailing slash. Example: `http://localhost:8080`.',\n type: 'String',\n },\n {\n name: 'apiKey',\n desc: 'Sensu API Key.',\n type: 'String',\n },\n {\n name: 'checkName',\n desc: 'Check name. Use alphanumeric characters, underscores (`_`), periods (`.`), and hyphens (`-`).',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'Event text. Mapped to `output` in the Sensu Events API request.',\n type: 'String',\n },\n {\n name: 'handlers',\n desc: 'Sensu handlers to execute. Default is `[]`.',\n type: 'Array of Strings',\n },\n {\n name: 'status',\n desc: 'Event status code that indicates state. Default is `0`.',\n type: 'Integer',\n },\n {\n name: 'state',\n desc: 'Event state. Default is \"passing\" for 0 status and \"failing\" for other statuses.',\n type: 'String',\n },\n {\n name: 'namespace',\n desc: 'Sensu namespace. Default is `default`.',\n type: 'String',\n },\n {\n name: 'entityName',\n desc: 'Event source. Use alphanumeric characters, underscores (`_`), periods (`.`), and hyphens (`-`).',\n type: 'String',\n },\n ],\n package: 'contrib/sranka/sensu',\n desc: 'Sends a single event to the Sensu Events API.',\n example: `sensu.event(\n url: \"http://localhost:8080\",\n apiKey: \"mYSuP3rs3cREtApIK3Y\",\n checkName: \"checkName\",\n text: \"Event output text\",\n handlers: [],\n status: 0,\n state: \"passing\",\n namespace: \"default\",\n entityName: \"influxdb\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/sensu/event/`,\n },\n {\n name: 'set',\n args: [\n {\n name: 'key',\n desc: 'The label of the column to modify or set.',\n type: 'String',\n },\n {\n name: 'value',\n desc: 'The string value to set.',\n type: 'String',\n },\n ],\n package: '',\n desc: '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.',\n example: 'set(key: \"_field\", value: \"my_field\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/set/`,\n },\n {\n name: 'skew',\n args: [\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Outputs the skew of non-null records as a float.',\n example: 'skew(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/skew/`,\n },\n {\n name: 'slack.endpoint',\n args: [\n {\n name: 'url',\n desc: 'The Slack API URL. Defaults to `https://slack.com/api/chat.postMessage`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'The Slack API token used to interact with Slack. Defaults to `\"\"`.',\n type: 'String',\n },\n ],\n package: 'slack',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = slack.endpoint(\n url: \"https://slack.com/api/chat.postMessage\",\n token: \"mySuPerSecRetTokEn\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/slack/endpoint/`,\n },\n {\n name: 'slack.message',\n args: [\n {\n name: 'url',\n desc: 'The Slack API URL. Defaults to `https://slack.com/api/chat.postMessage`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'The Slack API token used to interact with Slack. Defaults to `\"\"`.',\n type: 'String',\n },\n {\n name: 'channel',\n desc: 'The name of channel to post the message to.',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'The text to display in the Slack message.',\n type: 'String',\n },\n {\n name: 'color',\n desc: 'The color to include with the message.',\n type: 'String',\n },\n ],\n package: 'slack',\n desc: 'Sends a single message to a Slack channel.',\n example: `slack.message(\n url: \"https://slack.com/api/chat.postMessage\",\n token: \"mySuPerSecRetTokEn\",\n channel: \"#flux\",\n text: \"This is a message from the Flux slack.message() function.\",\n color: \"good\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/slack/message/`,\n },\n {\n name: 'sleep',\n args: [\n {\n name: 'v',\n desc: 'Defines input tables.',\n type: 'Object',\n },\n {\n name: 'duration',\n desc: 'The length of time to delay execution.',\n type: 'Duration',\n },\n ],\n package: '',\n desc: 'Delays execution by a specified duration.',\n example: 'sleep(duration: 5s)',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/sleep/`,\n },\n {\n name: 'sort',\n args: [\n {\n name: 'columns',\n desc: 'List of columns by which to sort. Sort precedence is determined by list order (left to right). Default is `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n {\n name: 'desc',\n desc: 'Sort results in descending order. Default is `false`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: '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.',\n example: 'sort(columns: [\"_value\"], desc: false)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/sort/`,\n },\n {\n name: 'spread',\n args: [\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Outputs the difference between the minimum and maximum values in the specified column. Only `uint`, `int`, and `float` column types can be used.',\n example: 'spread(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/spread/`,\n },\n {\n name: 'sql.from',\n args: [\n {\n name: 'driverName',\n desc: 'The driver used to connect to the SQL database.',\n type: 'String',\n },\n {\n name: 'dataSourceName',\n desc: 'The connection string used to connect to the SQL database. The string’s form and structure depend on the driver.',\n type: 'String',\n },\n {\n name: 'query',\n desc: 'The query to run against the SQL database.',\n type: 'String',\n },\n ],\n package: 'sql',\n desc: 'Retrieves data from a SQL data source.',\n example:\n 'sql.from(driverName: \"postgres\", dataSourceName: \"postgresql://user:password@localhost\", query:\"SELECT * FROM example_table\")',\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/sql/from/`,\n },\n {\n name: 'sql.to',\n args: [\n {\n name: 'driverName',\n desc: 'The driver used to connect to the SQL database.',\n type: 'String',\n },\n {\n name: 'dataSourceName',\n desc: 'The connection string used to connect to the SQL database. The string’s form and structure depend on the driver.',\n type: 'String',\n },\n {\n name: 'table',\n desc: 'The destination table.',\n type: 'String',\n },\n {\n name: 'batchSize',\n desc: 'The number of parameters or columns that can be queued within each call to `Exec`. Defaults to `10000`.',\n type: 'Integer',\n },\n ],\n package: 'sql',\n desc: 'Writes data to a SQL database.',\n example:\n 'sql.to(driverName: \"postgres\", dataSourceName: \"postgresql://user:password@localhost\", table: \"example_table\")',\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/sql/to/`,\n },\n {\n name: 'stateCount',\n args: [\n {\n name: 'fn',\n desc: 'A single argument function that evaluates true or false to identify the state of the record.',\n type: 'Function',\n },\n {\n name: 'column',\n desc: 'The name of the column added to each record that contains the incremented state count.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the number of consecutive records in a given state and stores the increment in a new column.',\n example: 'stateCount(fn: (r) => r._field == \"state\", column: \"stateCount\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/statecount/`,\n },\n {\n name: 'stateDuration',\n args: [\n {\n name: 'fn',\n desc: 'A single argument function that evaluates true or false to identify the state of the record.',\n type: 'Function',\n },\n {\n name: 'column',\n desc: 'Name of the column added to each record that contains the incremented state duration.',\n type: 'String',\n },\n {\n name: 'unit',\n desc: 'Unit of time in which the state duration is incremented.',\n type: 'Duration',\n },\n ],\n package: '',\n desc: 'Computes the duration of a given state and stores the increment in a new column.',\n example:\n 'stateDuration(fn: (r) => r._measurement == \"state\", column: \"stateDuration\", unit: 1s)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stateduration/`,\n },\n {\n name: 'stddev',\n args: [\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n {\n name: 'mode',\n desc: 'The standard deviation mode (sample or population). Defaults to `\"sample\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the standard deviation of non-null records in specified column.',\n example: 'stddev(column: \"_value\", mode: \"sample\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/stddev/`,\n },\n {\n name: 'string',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'Integer | UInteger | Float | Boolean | Duration | Time',\n },\n ],\n package: '',\n desc: 'Converts a single value to a string.',\n example: 'string(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/string/`,\n },\n {\n name: 'strings.compare',\n args: [\n {\n name: 'v',\n desc: 'The string value to compare.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value to compare against.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Compares the lexicographical order of two strings.',\n example: 'strings.compare(v: \"a\", t: \"b\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/compare/`,\n },\n {\n name: 'strings.containsAny',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'chars',\n desc: 'Characters to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Reports whether a specified string contains characters from another string.',\n example: 'strings.containsAny(v: \"abc\", chars: \"and\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/containsany/`,\n },\n {\n name: 'strings.containsStr',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'substr',\n desc: 'The substring to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Reports whether a string contains a specified substring.',\n example: 'strings.containsStr(v: \"This and that\", substr: \"and\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/containsstr/`,\n },\n {\n name: 'strings.countStr',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'substr',\n desc: 'The substring count.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Counts the number of non-overlapping instances of a substring appears in a string.',\n example: 'strings.countStr(v: \"Hello mellow fellow\", substr: \"ello\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/countstr/`,\n },\n {\n name: 'strings.equalFold',\n args: [\n {\n name: 'v',\n desc: 'The string value to compare.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value to compare against.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Reports whether two UTF-8 strings are equal under Unicode case-folding.',\n example: 'strings.equalFold(v: \"Go\", t: \"go\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/equalfold/`,\n },\n {\n name: 'strings.hasPrefix',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'prefix',\n desc: 'The prefix to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Indicates if a string begins with a specified prefix.',\n example: 'strings.hasPrefix(v: \"go gopher\", prefix: \"go\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/hasprefix/`,\n },\n {\n name: 'strings.hasSuffix',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'suffix',\n desc: 'The suffix to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Indicates if a string ends with a specified suffix.',\n example: 'strings.hasSuffix(v: \"gopher go\", suffix: \"go\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/hassuffix/`,\n },\n {\n name: 'strings.index',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'substr',\n desc: 'The substring to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Returns the index of the first instance of a substring in a string. If the substring is not present, it returns `-1`.',\n example: 'strings.index(v: \"go gopher\", substr: \"go\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/index-func/`,\n },\n {\n name: 'strings.indexAny',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'chars',\n desc: 'Characters to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Returns the index of the first instance of specified characters in a string. If none of the specified characters are present, it returns -1.',\n example: 'strings.indexAny(v: \"chicken\", chars: \"aeiouy\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/indexany/`,\n },\n {\n name: 'strings.isDigit',\n args: [\n {\n name: 'v',\n desc: 'The single-character string to test.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Tests if a single-character string is a digit (0-9).',\n example: 'strings.isDigit(v: \"7\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/isdigit/`,\n },\n {\n name: 'strings.isLetter',\n args: [\n {\n name: 'v',\n desc: 'The single-character string to test.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Tests if a single-character string is a letter (a-z, A-Z).',\n example: 'strings.isLetter(v: \"A\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/isletter/`,\n },\n {\n name: 'strings.isLower',\n args: [\n {\n name: 'v',\n desc: 'The single-character string to test.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Tests if a single-character string is lowercase.',\n example: 'strings.isLower(v: \"a\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/islower/`,\n },\n {\n name: 'strings.isUpper',\n args: [\n {\n name: 'v',\n desc: 'The single-character string to test.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Tests if a single-character string is uppercase.',\n example: 'strings.isUpper(v: \"A\")',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/isupper/`,\n },\n {\n name: 'strings.joinStr',\n args: [\n {\n name: 'arr',\n desc: 'The array of strings to concatenate.',\n type: 'Array of Strings',\n },\n {\n name: 'v',\n desc: 'The separator to use in the concatenated value.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Concatenates elements of a string array into a single string using a specified separator.',\n example: 'strings.joinStr(arr: [\"a\", \"b\", \"c\"], v: \",\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/joinstr/`,\n },\n {\n name: 'strings.lastIndex',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'substr',\n desc: 'The substring to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Returns the index of the last instance of a substring in a string. If the substring is not present, the function returns -1.',\n example: 'strings.lastIndex(v: \"go gopher\", substr: \"go\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/lastindex/`,\n },\n {\n name: 'strings.lastIndexAny',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'chars',\n desc: 'Characters to search for.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: '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.',\n example: 'strings.lastIndexAny(v: \"chicken\", chars: \"aeiouy\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/lastindexany/`,\n },\n {\n name: 'strings.repeat',\n args: [\n {\n name: 'v',\n desc: 'The string value to repeat.',\n type: 'String',\n },\n {\n name: 'i',\n desc: 'The number of times to repeat `v`.',\n type: 'Integer',\n },\n ],\n package: 'strings',\n desc: 'Returns a string consisting of `i` copies of a specified string.',\n example: 'strings.repeat(v: \"ha\", i: 3)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/repeat/`,\n },\n {\n name: 'strings.replace',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The substring to replace.',\n type: 'String',\n },\n {\n name: 'u',\n desc: 'The replacement for `i` instances of `t`.',\n type: 'String',\n },\n {\n name: 'i',\n desc: 'The number of non-overlapping `t` matches to replace.',\n type: 'Integer',\n },\n ],\n package: 'strings',\n desc: 'Replaces the first `i` non-overlapping instances of a substring with a specified replacement.',\n example: 'strings.replace(v: \"oink oink oink\", t: \"oink\", u: \"moo\", i: 2)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/replace/`,\n },\n {\n name: 'strings.replaceAll',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The substring to replace.',\n type: 'String',\n },\n {\n name: 'u',\n desc: 'The replacement for all instances of `t`.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Replaces all non-overlapping instances of a substring with a specified replacement.',\n example: 'strings.replaceAll(v: \"oink oink oink\", t: \"oink\", u: \"moo\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/replaceall/`,\n },\n {\n name: 'strings.split',\n args: [\n {\n name: 'v',\n desc: 'The string value to split.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value that acts as the separator.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Splits a string on a specified separator and returns an array of substrings.',\n example: 'strings.split(v: \"a flux of foxes\", t: \" \")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/split/`,\n },\n {\n name: 'strings.splitAfter',\n args: [\n {\n name: 'v',\n desc: 'The string value to split.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value that acts as the separator.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Splits a string after a specified separator and returns an array of substrings.',\n example: 'strings.splitAfter(v: \"a flux of foxes\", t: \" \")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/splitafter/`,\n },\n {\n name: 'strings.splitAfterN',\n args: [\n {\n name: 'v',\n desc: 'The string value to split.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value that acts as the separator.',\n type: 'String',\n },\n {\n name: 'i',\n desc: 'The number of substrings to return.',\n type: 'Integer',\n },\n ],\n package: 'strings',\n desc: 'Splits a string after a specified separator and returns an array of `i` substrings.',\n example: 'strings.splitAfterN(v: \"a flux of foxes\", t: \" \", i: 2)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/splitaftern/`,\n },\n {\n name: 'strings.splitN',\n args: [\n {\n name: 'v',\n desc: 'The string value to split.',\n type: 'String',\n },\n {\n name: 't',\n desc: 'The string value that acts as the separator.',\n type: 'String',\n },\n {\n name: 'i',\n desc: 'The number of substrings to return.',\n type: 'Integer',\n },\n ],\n package: 'strings',\n desc: 'Splits a string on a specified separator and returns an array of `i` substrings.',\n example: 'strings.splitN(v: \"a flux of foxes\", t: \" \", i: 2)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/splitn/`,\n },\n {\n name: 'strings.strlen',\n args: [\n {\n name: 'v',\n desc: 'The string value to measure.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Returns the length of a string.',\n example: 'strings.strlen(v: \"a flux of foxes\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/strlen/`,\n },\n {\n name: 'strings.substring',\n args: [\n {\n name: 'v',\n desc: 'The string value to search.',\n type: 'String',\n },\n {\n name: 'start',\n desc: 'The starting index of the substring.',\n type: 'Integer',\n },\n {\n name: 'end',\n desc: 'The ending index of the substring.',\n type: 'Integer',\n },\n ],\n package: 'strings',\n desc: 'Returns a substring based on start and end parameters.',\n example: 'strings.substring(v: \"influx\", start: 0, end: 3)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/substring/`,\n },\n STRINGS_TITLE,\n {\n name: 'strings.toLower',\n args: [\n {\n name: 'v',\n desc: 'The string value to convert.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Converts a string to lower case.',\n example: 'strings.toLower(v: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/tolower/`,\n },\n {\n name: 'strings.toTitle',\n args: [\n {\n name: 'v',\n desc: 'The string value to convert.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Converts all characters in a string to title case.',\n example: 'strings.toTitle(v: \"a flux of foxes\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/totitle/`,\n },\n {\n name: 'strings.toUpper',\n args: [\n {\n name: 'v',\n desc: 'The string value to convert.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Converts a string to upper case.',\n example: 'strings.toUpper(v: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/toupper/`,\n },\n STRINGS_TRIM,\n {\n name: 'strings.trimLeft',\n args: [\n {\n name: 'v',\n desc: 'The string to remove characters from.',\n type: 'String',\n },\n {\n name: 'cutset',\n desc: 'The leading characters to remove from the string.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes specified leading characters from a string.',\n example: 'strings.trimLeft(v: \".abc\", cutset: \".\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trimleft/`,\n },\n {\n name: 'strings.trimPrefix',\n args: [\n {\n name: 'v',\n desc: 'The string value to trim.',\n type: 'String',\n },\n {\n name: 'prefix',\n desc: 'The prefix to remove.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes a prefix from a string. Strings that do not start with the prefix are returned unchanged.',\n example: 'strings.trimPrefix(v: r._value, prefix: \"abc_\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trimprefix/`,\n },\n {\n name: 'strings.trimRight',\n args: [\n {\n name: 'v',\n desc: 'The string to remove characters from.',\n type: 'String',\n },\n {\n name: 'cutset',\n desc: 'The trailing characters to remove from the string.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes specified trailing characters from a string.',\n example: 'strings.trimRight(v: \"abc.\", cutset: \".\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trimright/`,\n },\n {\n name: 'strings.trimSpace',\n args: [\n {\n name: 'v',\n desc: 'The string value to trim.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes leading and trailing spaces from a string.',\n example: 'strings.trimSpace(v: r._value)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trimspace/`,\n },\n {\n name: 'strings.trimSuffix',\n args: [\n {\n name: 'v',\n desc: 'The string value to trim.',\n type: 'String',\n },\n {\n name: 'suffix',\n desc: 'The suffix to remove.',\n type: 'String',\n },\n ],\n package: 'strings',\n desc: 'Removes a suffix from a string. Strings that do not end with the suffix are returned unchanged.',\n example: 'strings.trimSuffix(v: r._value, suffix: \"_123\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/strings/trimsuffix/`,\n },\n {\n name: 'sum',\n args: [\n {\n name: 'column',\n desc: 'The column on which to operate. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Computes the sum of non-null records in the specified column.',\n example: 'sum(column: \"_value\")',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/sum/`,\n },\n {\n name: 'system.time',\n args: [],\n package: 'system',\n desc: 'Returns the current system time.',\n example: 'system.time()',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/system/time/`,\n },\n {\n name: 'table.fill',\n args: [],\n package: 'experimental/table',\n desc: 'Adds a single row to empty tables in a stream of tables.',\n example: 'table.fill()',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/table/fill/`,\n },\n {\n name: 'tableFind',\n args: [\n {\n name: 'fn',\n desc: 'A predicate function for matching keys in a table group key.',\n type: 'Function',\n },\n ],\n package: '',\n desc: 'Extracts the first table in a stream of tables whose group key values match a predicate. If no table is found, the function errors.',\n example: 'tableFind(fn: (key) => key._field == \"fieldName\")',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/stream-table/tablefind/`,\n },\n {\n name: 'tail',\n args: [\n {\n name: 'n',\n desc: 'The maximum number of records to output.',\n type: 'Integer',\n },\n {\n name: 'offset',\n desc: 'The number of records to skip at the end of a table before limiting to `n`. Defaults to `0`.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Limits each output table to the last `n` records, excluding the offset.',\n example: 'tail(n: 10)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/tail/`,\n },\n {\n name: 'tasks.lastSuccess',\n args: [\n {\n name: 'orTime',\n desc: 'Default time value returned if the task has never successfully run.',\n type: 'Time',\n },\n ],\n package: 'influxdata/influxdb/tasks',\n desc: 'Returns the time of last successful run of an InfluxDB task or the value of the `orTime` parameter if the task has never successfully run.',\n example: 'tasks.lastSuccess(orTime: 2020-10-01T00:00:00Z)',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/influxdb-tasks/lastsuccess/`,\n },\n {\n name: 'teams.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Incoming webhook URL.',\n type: 'String',\n },\n ],\n package: 'contrib/sranka/teams',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = teams.endpoint(\n url: \"https://outlook.office.com/webhook/example-webhook\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/teams/endpoint/`,\n },\n {\n name: 'teams.message',\n args: [\n {\n name: 'url',\n desc: 'Incoming webhook URL.',\n type: 'String',\n },\n {\n name: 'title',\n desc: 'Message card title.',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'Message card text.',\n type: 'String',\n },\n {\n name: 'summary',\n desc: 'Message card summary. Default is `\"\"`. If no summary is provided, Flux generates the summary from the message text.',\n type: 'String',\n },\n ],\n package: 'contrib/sranka/teams',\n desc: 'Sends a single message to a Microsoft Teams channel using an incoming webhook.',\n example: `teams.message(\n url: \"https://outlook.office.com/webhook/example-webhook\",\n title: \"Example message title\",\n text: \"Example message text\",\n summary: \"\",\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/teams/message/`,\n },\n {\n name: 'telegram.endpoint',\n args: [\n {\n name: 'url',\n desc: 'URL of the Telegram bot endpoint. Default is `https://api.telegram.org/bot`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'Telegram bot token.',\n type: 'String',\n },\n {\n name: 'parseMode',\n desc: 'Parse mode of the message text. Default is `\"MarkdownV2\"`.',\n type: 'String',\n },\n {\n name: 'disableWebPagePreview',\n desc: 'Disable preview of web links in the sent message. Default is `false`.',\n type: 'Boolean',\n },\n ],\n package: 'contrib/sranka/telegram',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = telegram.endpoint(\n url: \"https://api.telegram.org/bot\",\n token: \"S3crEtTel3gRamT0k3n\",\n parseMode: \"MarkdownV2\",\n disableWebPagePreview: false,\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/telegram/endpoint/`,\n },\n {\n name: 'telegram.message',\n args: [\n {\n name: 'url',\n desc: 'URL of the Telegram bot endpoint. Default is `https://api.telegram.org/bot`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'Telegram bot token.',\n type: 'String',\n },\n {\n name: 'channel',\n desc: 'Telegram channel ID.',\n type: 'String',\n },\n {\n name: 'text',\n desc: 'Message text.',\n type: 'String',\n },\n {\n name: 'parseMode',\n desc: 'Parse mode of the message text. Default is `\"MarkdownV2\"`.',\n type: 'String',\n },\n {\n name: 'disableWebPagePreview',\n desc: 'Disable preview of web links in the sent message. Default is `false`.',\n type: 'Boolean',\n },\n {\n name: 'silent',\n desc: 'Send message silently. Default is `true`.',\n type: 'Boolean',\n },\n ],\n package: 'contrib/sranka/telegram',\n desc: 'Sends a single message to a Telegram channel using the sendMessage method of the Telegram Bot API.',\n example: `telegram.message(\n url: \"https://api.telegram.org/bot\",\n token: \"S3crEtTel3gRamT0k3n\",\n channel: \"-12345\",\n text: \"Example message text\",\n parseMode: \"MarkdownV2\",\n disableWebPagePreview: false,\n silent: true\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/telegram/message/`,\n },\n {\n name: 'testing.assertEmpty',\n args: [],\n package: 'testing',\n desc: 'Tests if an input stream is empty.',\n example: 'testing.assertEmpty()',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/assertempty/`,\n },\n {\n name: 'testing.assertEquals',\n args: [\n {\n name: 'name',\n desc: 'Unique name given to the assertion.',\n type: 'String',\n },\n {\n name: 'got',\n desc: 'The stream containing data to test.',\n type: 'Stream of tables',\n },\n {\n name: 'want',\n desc: 'The stream that contains the expected data to test against.',\n type: 'Stream of tables',\n },\n ],\n package: 'testing',\n desc: 'Tests whether two streams have identical data.',\n example: 'testing.assertEquals(got: got, want: want)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/assertequals/`,\n },\n {\n name: 'testing.benchmark',\n args: [\n {\n name: 'case',\n desc: 'Test case to benchmark.',\n type: 'Function',\n },\n ],\n package: 'testing',\n desc: 'Executes a test case without comparing test output with the expected test output.',\n example: 'testing.benchmark(case: exampleTestCase)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/benchmark/`,\n },\n {\n name: 'testing.diff',\n args: [\n {\n name: 'got',\n desc: 'The stream containing data to test.',\n type: 'Stream of tables',\n },\n {\n name: 'want',\n desc: 'The stream that contains the expected data to test against.',\n type: 'Stream of tables',\n },\n {\n name: 'epsilon',\n desc: 'How far apart two float values can be, but still considered equal. Defaults to `0.000000001`.',\n type: 'Float',\n },\n ],\n package: 'testing',\n desc: 'Produces a diff between two streams.',\n example: 'testing.assertEquals(got: got, want: want)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/diff/`,\n },\n {\n name: 'testing.inspect',\n args: [\n {\n name: 'case',\n desc: 'Test case to inspect.',\n type: 'Function',\n },\n ],\n package: 'testing',\n desc: 'Returns information about a test case.',\n example: 'testing.inspect(case: exampleTestCase)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/inspect/`,\n },\n {\n name: 'testing.load',\n args: [],\n package: 'testing',\n desc: 'Loads tests data from a stream of tables.',\n example: 'testing.load()',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/inspect/`,\n },\n {\n name: 'testing.loadMem',\n args: [\n {\n name: 'csv',\n desc: 'Annotated CSV data to load.',\n type: 'String',\n },\n ],\n package: 'testing',\n desc: 'Loads annotated CSV test data from memory to emulate query results returned by Flux.',\n example: 'testing.loadMem(csv: csvData)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/loadmem/`,\n },\n {\n name: 'testing.loadStorage',\n args: [\n {\n name: 'csv',\n desc: 'Annotated CSV data to load.',\n type: 'String',\n },\n ],\n package: 'testing',\n desc: 'Loads annotated CSV test data as if it were queried from InfluxDB.',\n example: 'testing.loadStorage(csv: csvData)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/loadstorage/`,\n },\n {\n name: 'testing.run',\n args: [\n {\n name: 'case',\n desc: 'Test case to run.',\n type: 'Function',\n },\n ],\n package: 'testing',\n desc: 'Executes a specified test case.',\n example: 'testing.run(case: exampleTestCase)',\n category: 'Tests',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/testing/run/`,\n },\n {\n name: 'tickscript.alert',\n args: [\n {\n name: 'check',\n desc: 'InfluxDB check data. See `tickscript.defineCheck()`.',\n type: 'Record',\n },\n {\n name: 'id',\n desc: 'Function that returns the InfluxDB check ID provided by the check record. Default is `(r) => \"${r._check_id}\"`.',\n type: 'Function',\n },\n {\n name: 'details',\n desc: 'Function to return the InfluxDB check details using data from input rows. Default is `(r) => \"\"`.',\n type: 'Function',\n },\n {\n name: 'message',\n desc: 'Function to return the InfluxDB check message using data from input rows. Default is `(r) => \"Threshold Check: ${r._check_name} is: ${r._level}\"`.',\n type: 'Function',\n },\n {\n name: 'crit',\n desc: 'Predicate function to determine crit status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'warn',\n desc: 'Predicate function to determine warn status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'info',\n desc: 'Predicate function to determine info status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'ok',\n desc: 'Predicate function to determine ok status. Default is `(r) => false`.',\n type: 'Function',\n },\n {\n name: 'topic',\n desc: 'Check topic. Default is `\"\"`.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Identifies events of varying severity levels and writes them to the statuses measurement in the InfluxDB `_monitoring` system bucket.',\n example: `tickscript.alert(\n check,\n id: (r) => \"\\${r._check_id}\",\n details: (r) => \"\",\n message: (r) => \"Threshold Check: \\${r._check_name} is: \\${r._level}\",\n crit: (r) => false,\n warn: (r) => false,\n info: (r) => false,\n ok: (r) => true,\n topic: \"\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/alert/`,\n },\n {\n name: 'tickscript.compute',\n args: [\n {\n name: 'column',\n desc: 'Column to operate on. Default is `_value`.',\n type: 'String',\n },\n {\n name: 'fn',\n desc: 'Aggregate or selector function to apply.',\n type: 'Function',\n },\n {\n name: 'as',\n desc: 'New column name.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'An alias for `tickscript.select()` that changes a column’s name and optionally applies an aggregate or selector function.',\n example: `tickscript.compute(\n column: \"_value\",\n fn: sum,\n as: \"example-name\"\n)`,\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/compute/`,\n },\n {\n name: 'tickscript.deadman',\n args: [\n {\n name: 'check',\n desc: 'InfluxDB check data. See `tickscript.defineCheck()`.',\n type: 'Record',\n },\n {\n name: 'measurement',\n desc: 'Measurement name. Should match the queried measurement.',\n type: 'String',\n },\n {\n name: 'threshold',\n desc: 'Count threshold. The function assigns a `crit` status to input tables with a number of rows less than or equal to the threshold. Default is `0`.',\n type: 'Integer',\n },\n {\n name: 'id',\n desc: 'Function that returns the InfluxDB check ID provided by the check record. Default is `(r) => \"${r._check_id}\"`.',\n type: 'Function',\n },\n {\n name: 'message',\n desc: 'Function that returns the InfluxDB check message using data from input rows. Default is `(r) => \"Deadman Check: ${r._check_name} is: \" + (if r.dead then \"dead\" else \"alive\")`.',\n type: 'Function',\n },\n {\n name: 'topic',\n desc: 'Check topic. Default is `\"\"`.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Detects low data throughput and writes a point with a critical status to the InfluxDB `_monitoring` system bucket.',\n example: `tickscript.deadman(\n check: {},\n measurement: \"example-measurement\",\n threshold: 0,\n id: (r)=>\"\\${r._check_id}\",\n message: (r) => \"Deadman Check: \\${r._check_name} is: \" + (if r.dead then \"dead\" else \"alive\"),\n topic: \"\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/deadman/`,\n },\n {\n name: 'tickscript.defineCheck',\n args: [\n {\n name: 'id',\n desc: 'InfluxDB check ID.',\n type: 'String',\n },\n {\n name: 'name',\n desc: 'InfluxDB check name.',\n type: 'String',\n },\n {\n name: 'type',\n desc: 'InfluxDB check type. Default is `custom`. Valid types are `thresold`, `deadman`, and `custom`.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Creates and returns a record with custom check data required by `tickscript.alert()` and `tickscript.deadman()`.',\n example: `tickscript.defineCheck(\n id: \"000000000000\",\n name: \"Example check name\",\n type: \"custom\"\n)`,\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/definecheck/`,\n },\n {\n name: 'tickscript.groupBy',\n args: [\n {\n name: 'columns',\n desc: 'List of columns to group by.',\n type: 'Array of Strings',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Groups results by the _measurement column and other specified columns.',\n example: `tickscript.groupBy(\n columns: [\"exampleColumn\"]\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/groupby/`,\n },\n {\n name: 'tickscript.join',\n args: [\n {\n name: 'tables',\n desc: 'Map of two streams to join.',\n type: 'Record',\n },\n {\n name: 'on',\n desc: 'List of columns to join on. Default is `[\"_time\"]`.',\n type: 'Array of Strings',\n },\n {\n name: 'measurement',\n desc: 'Measurement name to use in results.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Merges two input streams into a single output stream based on specified columns with equal values and appends a new measurement name.',\n example: `tickscript.join(\n tables: {t1: example1, t2: example2}\n on: [\"_time\"],\n measurement: \"example-measurement\"\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/join/`,\n },\n {\n name: 'tickscript.select',\n args: [\n {\n name: 'column',\n desc: 'Column to operate on. Default is `_value`.',\n type: 'String',\n },\n {\n name: 'fn',\n desc: 'Aggregate or selector function to apply.',\n type: 'Function',\n },\n {\n name: 'as',\n desc: 'New column name.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Changes a column’s name and optionally applies an aggregate or selector function to values in the column.',\n example: `tickscript.select(\n column: \"_value\",\n fn: sum,\n as: \"example-name\"\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/select/`,\n },\n {\n name: 'tickscript.selectWindow',\n args: [\n {\n name: 'column',\n desc: 'Column to operate on. Default is `_value`.',\n type: 'String',\n },\n {\n name: 'fn',\n desc: 'Aggregate or selector function to apply.',\n type: 'Function',\n },\n {\n name: 'as',\n desc: 'New column name.',\n type: 'String',\n },\n {\n name: 'every',\n desc: 'Duration of windows.',\n type: 'Duration',\n },\n {\n name: 'defaultValue',\n desc: 'Default fill value for null values in `column`. Must be the same data type as `column`.',\n type: 'String | Boolean | Float | Integer | Uinteger | Bytes',\n },\n ],\n package: 'contrib/bonitoo-io/tickscript',\n desc: 'Changes a column’s name, windows rows by time, and applies an aggregate or selector function the specified column for each window of time.',\n example: `tickscript.selectWindow(\n column: \"_value\",\n fn: sum,\n as: \"example-name\",\n every: 1m,\n defaultValue: 0.0,\n)`,\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/tickscript/selectwindow/`,\n },\n {\n name: 'time',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'String | Integer | UInteger',\n },\n ],\n package: '',\n desc: 'Converts a single value to a time.',\n example: 'time(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/time/`,\n },\n {\n name: 'timedMovingAverage',\n args: [\n {\n name: 'every',\n desc: 'The frequency of time windows.',\n type: 'Duration',\n },\n {\n name: 'period',\n desc: 'The length of each averaged time window.',\n type: 'Duration',\n },\n {\n name: 'column',\n desc: 'The column on which to compute the moving average. Defaults to `\"_value\"`',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Calculates the mean of values in a defined time range at a specified frequency.',\n example: 'timedMovingAverage(every: 1d, period: 5d)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/timedmovingaverage/`,\n },\n {\n name: 'timeShift',\n args: [\n {\n name: 'duration',\n desc: 'The amount of time to add to each time value. May be a negative duration.',\n type: 'String',\n },\n {\n name: 'columns',\n desc: 'The list of all columns to be shifted. Defaults to `[\"_start\", \"_stop\", \"_time\"]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Adds a fixed duration to time columns. The output table schema is the same as the input table.',\n example: 'timeShift(duration: 10h, columns: [\"_start\", \"_stop\", \"_time\"])',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/timeshift/`,\n },\n {\n name: 'timeWeightedAvg',\n args: [\n {\n name: 'unit',\n desc: 'The time duration used when computing the time-weighted average.',\n type: 'Duration',\n },\n ],\n package: '',\n desc: 'Computes the time-weighted average of non-null records in a table using linear interpolation.',\n example: 'timeWeightedAvg(unit: 1m)',\n category: 'Aggregates',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/aggregates/timeweightedavg/`,\n },\n {\n name: 'to',\n args: [\n {\n name: 'bucket',\n desc: 'The bucket to which data is written. Mutually exclusive with `bucketID`.',\n type: 'String',\n },\n {\n name: 'bucketID',\n desc: 'The ID of the bucket to which data is written. Mutually exclusive with `bucket`.',\n type: 'String',\n },\n {\n name: 'org',\n desc: 'The organization name of the specified `bucket`. Only required when writing to a remote host. Mutually exclusive with `orgID`.',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'The organization ID of the specified `bucket`. Only required when writing to a remote host. Mutually exclusive with `org`.',\n type: 'String',\n },\n {\n name: 'host',\n desc: 'The remote InfluxDB host to which to write. If specified, a `token` is required.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'The authorization token to use when writing to a remote host. Required when a `host` is specified.',\n type: 'String',\n },\n {\n name: 'timeColumn',\n desc: 'The time column of the output. Default is `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'tagColumns',\n desc: 'The tag columns of the output. Defaults to all columns with type `string`, excluding all value columns and the `_field` column if present.',\n type: 'Array of Strings',\n },\n {\n name: 'fieldFn',\n desc: '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 })`',\n type: 'Function',\n },\n ],\n package: '',\n desc: 'The `to()` function writes data to an InfluxDB v2.0 bucket.',\n example: 'to(bucket: \"example-bucket\", org: \"example-org\")',\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/outputs/to/`,\n },\n {\n name: 'toBool',\n args: [],\n package: '',\n desc: 'Converts all values in the `_value` column to a boolean.',\n example: 'toBool()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/tobool/`,\n },\n {\n name: 'today',\n args: [],\n package: '',\n desc: 'Returns the `now()` timestamp truncated to the day unit.',\n example: 'today()',\n category: 'Miscellaneous',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/misc/today/`,\n },\n {\n name: 'toFloat',\n args: [],\n package: '',\n desc: 'Converts all values in the `_value` column to a float.',\n example: 'toFloat()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/tofloat/`,\n },\n {\n name: 'toInt',\n args: [],\n package: '',\n desc: 'Converts all values in the `_value` column to a integer.',\n example: 'toInt()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/toint/`,\n },\n {\n name: 'top',\n args: [\n {\n name: 'n',\n desc: 'Number of rows to return.',\n type: 'Integer',\n },\n {\n name: 'columns',\n desc: 'List of columns by which to sort. Sort precedence is determined by list order (left to right). Default is `[\"_value\"]`.',\n type: 'Array of Strings',\n },\n ],\n package: '',\n desc: 'Sorts a table by columns and keeps only the top n rows.',\n example: 'top(n:10, columns: [\"_value\"])',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/top/`,\n },\n {\n name: 'toString',\n args: [],\n package: '',\n desc: 'Converts a value to a string.',\n example: 'toString()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/tostring/`,\n },\n {\n name: 'toTime',\n args: [],\n package: '',\n desc: 'Converts a value to a time.',\n example: 'toTime()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/totime/`,\n },\n {\n name: 'toUInt',\n args: [],\n package: '',\n desc: 'Converts a value to an unsigned integer.',\n example: 'toUInt()',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/touint/`,\n },\n {\n name: 'tripleEMA',\n args: [\n {\n name: 'n',\n desc: 'The number of points to average.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Calculates the exponential moving average of values in the `_value` column grouped into `n` number of points, giving more weight to recent data at triple the rate of `exponentialMovingAverage()`.',\n example: 'tripleEMA(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/tripleema/`,\n },\n {\n name: 'tripleExponentialDerivative',\n args: [\n {\n name: 'n',\n desc: 'The number of points to use in the calculation.',\n type: 'Integer',\n },\n ],\n package: '',\n desc: 'Calculates a triple exponential derivative (TRIX) of input tables using n points.',\n example: 'tripleExponentialDerivative(n: 5)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/tripleexponentialderivative/`,\n },\n {\n name: 'truncateTimeColumn',\n args: [\n {\n name: 'unit',\n desc: 'The unit of time to truncate to.',\n type: 'Duration',\n },\n ],\n package: '',\n desc: 'Truncates all `_time` values to a specified unit.',\n example: 'truncateTimeColumn(unit: 1m)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/truncatetimecolumn/`,\n },\n {\n name: 'uint',\n args: [\n {\n name: 'v',\n desc: 'The value to convert.',\n type: 'Boolean | Duration | Float | Integer | Numeric String | Time',\n },\n ],\n package: '',\n desc: 'Converts a single value to a uinteger.',\n example: 'uint(v: r._value)',\n category: 'Type Conversions',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/type-conversions/uint/`,\n },\n UNION,\n {\n name: 'unique',\n args: [\n {\n name: 'column',\n desc: 'The column searched for unique values. Defaults to `\"_value\"`.',\n type: 'String',\n },\n ],\n package: '',\n desc: 'Returns all rows containing unique values in a specified column.',\n example: 'unique(column: \"_value\")',\n category: 'Selectors',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/selectors/unique/`,\n },\n {\n name: 'usage.from',\n args: [\n {\n name: 'start',\n desc: 'Earliest time to include in results.',\n type: 'Time | Duration',\n },\n {\n name: 'stop',\n desc: 'Latest time to include in results.',\n type: 'Time | Duration',\n },\n {\n name: 'host',\n desc: 'InfluxDB Cloud region URL (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'InfluxDB Cloud organization ID (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB Cloud authentication token (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'raw',\n desc: 'Return raw, high resolution usage data instead of downsampled usage data. Default is `false`.',\n type: 'Boolean',\n },\n ],\n package: 'experimental/usage',\n desc: 'Returns usage data from an InfluxDB Cloud organization.',\n example: `usage.from(\n start: -30d,\n stop: now(),\n host: \"\",\n orgID: \"\",\n token: \"\",\n raw: false\n)`,\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/usage/from/`,\n },\n {\n name: 'usage.limits',\n args: [\n {\n name: 'host',\n desc: 'InfluxDB Cloud region URL (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'orgID',\n desc: 'InfluxDB Cloud organization ID (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'token',\n desc: 'InfluxDB Cloud authentication token (Required if executed outside of your InfluxDB Cloud organization or region). Default is `\"\"`.',\n type: 'String',\n },\n ],\n package: 'experimental/usage',\n desc: 'Returns a record containing usage limits for an InfluxDB Cloud organization.',\n example: `usage.limits(\n host: \"\",\n orgID: \"\",\n token: \"\"\n)`,\n category: 'Inputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/experimental/usage/limits/`,\n },\n {\n name: 'victorops.endpoint',\n args: [\n {\n name: 'url',\n desc: 'VictorOps REST endpoint integration URL.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/victorops',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = victorops.endpoint(\n url: \"https://alert.victorops.com/integrations/generic/00000000/alert\\${apiKey}/\\${routingKey}\",\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/victorops/endpoint/`,\n },\n {\n name: 'victorops.event',\n args: [\n {\n name: 'url',\n desc: 'VictorOps REST endpoint integration URL.',\n type: 'String',\n },\n {\n name: 'monitoringTool',\n desc: 'Monitoring agent name. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'messageType',\n desc: 'VictorOps message type (alert behavior). Valid values are `CRITICAL`, `WARNING`, and `INFO`.',\n type: 'String',\n },\n {\n name: 'entityID',\n desc: 'Incident ID. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'entityDisplayName',\n desc: 'Incident display name or summary. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'stateMessage',\n desc: 'Verbose incident message. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'timestamp',\n desc: 'Incident start time. Default is `now()`.',\n type: 'Time',\n },\n ],\n package: 'contrib/bonitoo-io/victorops',\n desc: 'Sends an alert to VictorOps (Now Splunk On-Call).',\n example: `victorops.event(\n url: \"https://alert.victorops.com/integrations/generic/00000000/alert/\\${api_key}/\\${routing_key}\",\n monitoringTool: \"\",\n messageType: \"CRITICAL\",\n entityID: \"\",\n entityDisplayName: \"\",\n stateMessage: \"\",\n timestamp: now()\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/victorops/event/`,\n },\n {\n name: 'window',\n args: [\n {\n name: 'every',\n desc: 'Duration of time between windows. Defaults to `period` value.',\n type: 'Duration',\n },\n {\n name: 'period',\n desc: '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.',\n type: 'Duration',\n },\n {\n name: 'offset',\n desc: 'The offset duration relative to the `location` offset. It can be negative, indicating that the offset goes backwards in time. The default aligns the window boundaries with `now`.',\n type: 'Duration',\n },\n {\n name: 'timeColumn',\n desc: 'The column containing time. Defaults to `\"_time\"`.',\n type: 'String',\n },\n {\n name: 'startColumn',\n desc: 'The column containing the window start time. Defaults to `\"_start\"`.',\n type: 'String',\n },\n {\n name: 'stopColumn',\n desc: 'The column containing the window stop time. Defaults to `\"_stop\"`.',\n type: 'String',\n },\n {\n name: 'createEmpty',\n desc: 'Specifies whether empty tables should be created. Defaults to `false`.',\n type: 'Boolean',\n },\n ],\n package: '',\n desc: '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.',\n example: 'window(every: v.windowPeriod)',\n category: 'Transformations',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/transformations/window/`,\n },\n {\n name: 'yield',\n args: [\n {\n name: 'name',\n desc: 'A unique name for the yielded results.',\n type: 'String',\n },\n ],\n package: '',\n desc: '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.',\n example: 'yield(name: \"custom-name\")',\n category: 'Outputs',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/built-in/outputs/yield/`,\n },\n {\n name: 'zenoss.endpoint',\n args: [\n {\n name: 'url',\n desc: 'Zenoss router endpoint URL.',\n type: 'String',\n },\n {\n name: 'username',\n desc: 'Zenoss username to use for HTTP BASIC authentication. Default is \"\" (no authentication).',\n type: 'String',\n },\n {\n name: 'password',\n desc: 'Zenoss password to use for HTTP BASIC authentication. Default is \"\" (no authentication).',\n type: 'String',\n },\n {\n name: 'action',\n desc: 'Zenoss router name. Default is `\"EventsRouter\"`.',\n type: 'String',\n },\n {\n name: 'method',\n desc: 'EventsRouter method. Default is `\"add_event\"`.',\n type: 'String',\n },\n {\n name: 'type',\n desc: 'Event type. Default is `\"rpc\"`.',\n type: 'String',\n },\n {\n name: 'tid',\n desc: 'Temporary request transaction ID. Default is `1`.',\n type: 'Integer',\n },\n ],\n package: 'contrib/bonitoo-io/zenoss',\n desc: 'A factory function that outputs another function. The output function requires a `mapFn` parameter. See the documentation link for a full example.',\n example: `endpoint = zenoss.endpoint(\n url: \"https://example.zenoss.io:8080/zport/dmd/evconsole_router\",\n username: \"example-user\",\n password: \"example-password\",\n action: \"EventsRouter\",\n method: \"add_event\",\n type: \"rpc\",\n tid: 1\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/zenoss/endpoint/`,\n },\n {\n name: 'zenoss.event',\n args: [\n {\n name: 'url',\n desc: 'Zenoss router endpoint URL.',\n type: 'String',\n },\n {\n name: 'username',\n desc: 'Zenoss username to use for HTTP BASIC authentication. Default is \"\" (no authentication).',\n type: 'String',\n },\n {\n name: 'password',\n desc: 'Zenoss password to use for HTTP BASIC authentication. Default is \"\" (no authentication).',\n type: 'String',\n },\n {\n name: 'action',\n desc: 'Zenoss router name. Default is `\"EventsRouter\"`.',\n type: 'String',\n },\n {\n name: 'method',\n desc: 'EventsRouter method. Default is `\"add_event\"`.',\n type: 'String',\n },\n {\n name: 'type',\n desc: 'Event type. Default is `\"rpc\"`.',\n type: 'String',\n },\n {\n name: 'tid',\n desc: 'Temporary request transaction ID. Default is `1`.',\n type: 'Integer',\n },\n {\n name: 'summary',\n desc: 'Event summary. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'device',\n desc: 'Related device. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'component',\n desc: 'Related component. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'severity',\n desc: 'Event severity level. Supported values are `Critical`, `Warning`, `Info`, and `Clear`.',\n type: 'String',\n },\n {\n name: 'eventClass',\n desc: 'Event class. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'eventClassKey',\n desc: 'Event class key. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'collector',\n desc: 'Zenoss collector. Default is `\"\"`.',\n type: 'String',\n },\n {\n name: 'message',\n desc: 'Related message. Default is `\"\"`.',\n type: 'String',\n },\n ],\n package: 'contrib/bonitoo-io/zenoss',\n desc: 'Sends an alert to Zenoss.',\n example: `zenoss.event(\n url: \"https://example.zenoss.io:8080/zport/dmd/evconsole_router\",\n username: \"example-user\",\n password: \"example-password\",\n action: \"EventsRouter\",\n method: \"add_event\",\n type: \"rpc\",\n tid: 1,\n summary: \"\",\n device: \"\",\n component: \"\",\n severity: \"Critical\",\n eventClass: \"\",\n eventClassKey: \"\",\n collector: \"\",\n message: \"\"\n)`,\n category: 'Alerting',\n link: `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/reference/flux/stdlib/contrib/zenoss/event/`,\n },\n]\n","import {Dispatch} from 'react'\nimport {get} from 'lodash'\n\nimport {queryBuilderFetcher} from 'src/timeMachine/apis/QueryBuilderFetcher'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\n// API\nimport {fetchAllBuckets} from 'src/buckets/api'\n\n// Types\nimport {\n Bucket,\n GetState,\n RemoteDataState,\n ResourceType,\n NotificationAction,\n} from 'src/types'\nimport {\n Action as AlertBuilderAction,\n setEvery,\n} from 'src/alerting/actions/alertBuilder'\n\n// Selectors\nimport {getOrg} from 'src/organizations/selectors'\nimport {getAll} from 'src/resources/selectors'\nimport {getStatus} from 'src/resources/selectors'\nimport {getTimeRangeWithTimezone} from 'src/dashboards/selectors'\nimport {\n getActiveQuery,\n getActiveTimeMachine,\n getWindowPeriodFromTimeRange,\n} from 'src/timeMachine/selectors'\n\n// Actions\nimport {editActiveQueryWithBuilderSync} from 'src/timeMachine/actions'\nimport {\n Action,\n addTagSelectorSync,\n removeTagSelectorSync,\n setAggregateWindow,\n setBuilderBucket,\n setBuilderBuckets,\n setBuilderBucketsStatus,\n setBuilderTagKeys,\n setBuilderTagKeySelection,\n setBuilderTagKeysStatus,\n setBuilderTagsStatus,\n setBuilderTagValues,\n setBuilderTagValuesSelection,\n setBuilderTagValuesStatus,\n setFunctions,\n} from 'src/timeMachine/actions/queryBuilder'\nimport {setBuckets} from 'src/buckets/actions/creators'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Constants\nimport {AGG_WINDOW_AUTO} from 'src/timeMachine/constants/queryBuilder'\nimport {CLOUD} from 'src/shared/constants'\n\nexport const removeTagSelector =\n (index: number) => (dispatch: Dispatch) => {\n queryBuilderFetcher.cancelFindValues(index)\n queryBuilderFetcher.cancelFindKeys(index)\n\n dispatch(removeTagSelectorSync(index))\n dispatch(loadTagSelector(index))\n }\n\nconst loadTagSelectorValues =\n (index: number) =>\n async (\n dispatch: Dispatch>,\n getState: GetState\n ) => {\n const startTime = Date.now()\n\n const state = getState()\n const {buckets, tags} = getActiveQuery(state).builderConfig\n const tagsSelections = tags.slice(0, index)\n\n if (!buckets[0]) {\n return\n }\n\n const bucket = buckets[0]\n\n const allBuckets = getAll(state, ResourceType.Buckets)\n const foundBucket = allBuckets.find(b => b.name === bucket)\n const orgID = get(foundBucket, 'orgID', getOrg(getState()).id)\n\n dispatch(setBuilderTagValuesStatus(index, RemoteDataState.Loading))\n\n try {\n const timeRange = getTimeRangeWithTimezone(state)\n const key = getActiveQuery(getState()).builderConfig.tags[index].key\n const searchTerm =\n getActiveTimeMachine(getState()).queryBuilder.tags[index]\n ?.valuesSearchTerm ?? ''\n\n const values = await queryBuilderFetcher.findValues(index, {\n url: '/api/v2/query',\n orgID,\n bucket,\n tagsSelections,\n key,\n searchTerm,\n timeRange,\n })\n\n const {values: selectedValues} = tags[index]\n\n for (const selectedValue of selectedValues) {\n // Even if the selected values didn't come back in the results, let them\n // be selected anyway\n if (!values.includes(selectedValue)) {\n values.unshift(selectedValue)\n }\n }\n\n dispatch(setBuilderTagValues(index, values))\n dispatch(loadTagSelector(index + 1))\n event(\n 'loadTagSelectorValues function',\n {\n time: startTime,\n },\n {duration: Date.now() - startTime}\n )\n } catch (e) {\n if (e.name === 'CancellationError') {\n return\n }\n\n console.error(e)\n dispatch(setBuilderTagValuesStatus(index, RemoteDataState.Error))\n }\n }\n\nexport const loadTagSelector =\n (index: number) =>\n async (\n dispatch: Dispatch>,\n getState: GetState\n ) => {\n const startTime = Date.now()\n\n const {buckets, tags} = getActiveQuery(getState()).builderConfig\n\n if (!tags[index] || !buckets[0]) {\n return\n }\n\n dispatch(setBuilderTagKeysStatus(index, RemoteDataState.Loading))\n\n const state = getState()\n const tagsSelections = tags.slice(0, index)\n\n const bucket = buckets[0]\n\n const allBuckets = getAll(getState(), ResourceType.Buckets)\n const foundBucket = allBuckets.find(b => b.name === bucket)\n\n const orgID = get(foundBucket, 'orgID', getOrg(getState()).id)\n\n try {\n const timeRange = getTimeRangeWithTimezone(state)\n\n const searchTerm =\n getActiveTimeMachine(state).queryBuilder.tags[index]?.keysSearchTerm ??\n ''\n\n const keys = await queryBuilderFetcher.findKeys(index, {\n url: '/api/v2/query',\n orgID,\n bucket,\n tagsSelections,\n searchTerm,\n timeRange,\n })\n\n const {key} = tags[index]\n\n if (!key) {\n let defaultKey: string\n\n if (index === 0 && keys.includes('_measurement')) {\n defaultKey = '_measurement'\n } else {\n defaultKey = keys[0]\n }\n\n dispatch(setBuilderTagKeySelection(index, defaultKey))\n } else if (!keys.includes(key)) {\n // Even if the selected key didn't come back in the results, let it be\n // selected anyway\n keys.unshift(key)\n }\n\n dispatch(setBuilderTagKeys(index, keys))\n dispatch(loadTagSelectorValues(index))\n event(\n 'loadTagSelector function',\n {\n time: startTime,\n },\n {duration: Date.now() - startTime}\n )\n } catch (e) {\n if (e.name === 'CancellationError') {\n return\n }\n\n console.error(e)\n dispatch(setBuilderTagKeysStatus(index, RemoteDataState.Error))\n }\n }\n\nexport const loadBuckets =\n () =>\n async (\n dispatch: Dispatch<\n Action | ReturnType | ReturnType\n >,\n getState: GetState\n ) => {\n if (\n getStatus(getState(), ResourceType.Buckets) === RemoteDataState.NotStarted\n ) {\n dispatch(setBuckets(RemoteDataState.Loading))\n }\n const startTime = Date.now()\n const orgID = getOrg(getState()).id\n dispatch(setBuilderBucketsStatus(RemoteDataState.Loading))\n\n let bucketsResponse\n try {\n if (CLOUD) {\n // a limit of -1 means fetch all buckets for this org\n bucketsResponse = await fetchAllBuckets(orgID, -1)\n } else {\n bucketsResponse = await fetchAllBuckets(orgID)\n }\n\n dispatch(\n setBuckets(RemoteDataState.Done, bucketsResponse.normalizedBuckets)\n )\n\n const allBuckets = bucketsResponse.buckets.map(b => b.name)\n\n const systemBuckets = allBuckets.filter(b => b.startsWith('_'))\n const userBuckets = allBuckets.filter(b => !b.startsWith('_'))\n const buckets = [...userBuckets, ...systemBuckets]\n\n const selectedBucket = getActiveQuery(getState()).builderConfig.buckets[0]\n\n dispatch(setBuilderBuckets(buckets))\n\n if (selectedBucket && buckets.includes(selectedBucket)) {\n dispatch(selectBucket(selectedBucket))\n } else {\n dispatch(selectBucket(buckets[0], true))\n }\n event(\n 'loadBuckets function',\n {\n time: startTime,\n },\n {duration: Date.now() - startTime}\n )\n } catch (e) {\n if (e.name === 'CancellationError') {\n return\n }\n\n console.error(e)\n dispatch(setBuilderBucketsStatus(RemoteDataState.Error))\n }\n }\n\nexport const setWindowPeriodSelectionMode =\n (mode: 'custom' | 'auto') =>\n (dispatch: Dispatch, getState: GetState) => {\n if (mode === 'custom') {\n const windowPeriod = getWindowPeriodFromTimeRange(getState())\n\n dispatch(setAggregateWindow(windowPeriod))\n }\n if (mode === 'auto') {\n dispatch(setAggregateWindow(AGG_WINDOW_AUTO))\n }\n }\n\nexport const selectAggregateWindow =\n (period: string) => (dispatch: Dispatch) => {\n dispatch(setAggregateWindow(period))\n dispatch(setEvery(period))\n }\n\nexport const selectBucket =\n (bucket: string, resetSelections: boolean = false) =>\n (dispatch: Dispatch>) => {\n dispatch(setBuilderBucket(bucket, resetSelections))\n dispatch(loadTagSelector(0))\n }\n\nexport const selectTagValue =\n (index: number, value: string) =>\n (\n dispatch: Dispatch>,\n getState: GetState\n ) => {\n const state = getState()\n const {\n timeMachines: {activeTimeMachineID},\n } = state\n const tags = getActiveQuery(state).builderConfig.tags\n const currentTag = tags[index]\n const values = currentTag.values\n\n let newValues: string[]\n\n if (values.includes(value)) {\n newValues = values.filter(v => v !== value)\n } else if (\n activeTimeMachineID === 'alerting' &&\n currentTag.key === '_field'\n ) {\n newValues = [value]\n } else if (isFlagEnabled('newQueryBuilder') && index === 0) {\n newValues = [value]\n } else {\n newValues = [...values, value]\n }\n\n if (newValues.length === 0 && index === 0) {\n dispatch(removeTagSelector(index + 1))\n }\n dispatch(setBuilderTagValuesSelection(index, newValues))\n\n // don't add a new tag filter if we're grouping\n if (currentTag.aggregateFunctionType === 'group') {\n return\n }\n\n if (index === tags.length - 1 && newValues.length) {\n dispatch(addTagSelector())\n } else {\n dispatch(loadTagSelector(index + 1))\n }\n }\n\nexport const multiSelectBuilderFunction =\n (name: string) =>\n (dispatch: Dispatch, getState: GetState) => {\n const {draftQueries, activeQueryIndex} = getActiveTimeMachine(getState())\n const functions = draftQueries[activeQueryIndex].builderConfig.functions\n\n const functionNames = functions.map(f => f.name)\n const clickedFunctionAlreadySelected = functionNames.includes(name)\n\n if (!clickedFunctionAlreadySelected) {\n // add clicked to selected\n dispatch(setFunctions([...functionNames, name]))\n } else {\n dispatch(setFunctions(functionNames.filter(n => n != name)))\n }\n }\n\nexport const singleSelectBuilderFunction =\n (name: string) => (dispatch: Dispatch, getState: GetState) => {\n const {draftQueries, activeQueryIndex} = getActiveTimeMachine(getState())\n const functions = draftQueries[activeQueryIndex].builderConfig.functions\n\n const functionNames = functions.map(f => f.name)\n const clickedFunctionAlreadySelected = functionNames.includes(name)\n\n if (!clickedFunctionAlreadySelected) {\n // select clicked function\n dispatch(setFunctions([name]))\n } else {\n if (functions.length > 1) {\n // if more than one function is selected, remove clicked from selected\n dispatch(setFunctions(functionNames.filter(n => n != name)))\n }\n }\n }\n\nexport const selectTagKey =\n (index: number, key: string) => (dispatch: Dispatch) => {\n dispatch(setBuilderTagKeySelection(index, key))\n dispatch(loadTagSelectorValues(index))\n }\n\nexport const searchTagValues =\n (index: number) => (dispatch: Dispatch) => {\n dispatch(loadTagSelectorValues(index))\n }\n\nexport const searchTagKeys =\n (index: number) => (dispatch: Dispatch) => {\n dispatch(loadTagSelector(index))\n }\n\nexport const addTagSelector =\n () => (dispatch: Dispatch, getState: GetState) => {\n dispatch(addTagSelectorSync())\n\n const newIndex = getActiveQuery(getState()).builderConfig.tags.length - 1\n\n dispatch(loadTagSelector(newIndex))\n }\n\nexport const reloadTagSelectors = () => (dispatch: Dispatch) => {\n dispatch(setBuilderTagsStatus(RemoteDataState.Loading))\n dispatch(loadTagSelector(0))\n}\n\nexport const setBuilderBucketIfExists =\n (bucketName: string) =>\n (\n dispatch: Dispatch<\n Action | ReturnType\n >,\n getState: GetState\n ) => {\n const buckets = getAll(getState(), ResourceType.Buckets)\n if (buckets.find(b => b.name === bucketName)) {\n dispatch(editActiveQueryWithBuilderSync())\n dispatch(setBuilderBucket(bucketName, true))\n }\n }\n","// Libraries\nimport {get} from 'lodash'\n\n// Types\nimport {AppState, Organization} from 'src/types'\n\nexport const getOrg = (state: AppState): Organization => {\n return get(state, 'resources.orgs.org', null)\n}\n\nexport const getOrgByID = (state: AppState, id: string) => {\n const orgs = get(state, 'resources.orgs.byID')\n\n if (!orgs) {\n throw new Error('No orgs have been set')\n }\n\n if (!orgs[id]) {\n throw new Error(\n `No org with id \"${id}\" found in orgs state: ${JSON.stringify(\n orgs,\n null,\n 2\n )}\"`\n )\n }\n\n return orgs[id]\n}\n","import {\n TimeRange,\n CustomTimeRange,\n TimeRangeDirection,\n TimeZone,\n} from 'src/types'\nimport {Duration, DurationUnit} from 'src/types/ast'\nimport {TIME_RANGE_FORMAT} from 'src/shared/constants/timeRanges'\nimport {createDateTimeFormatter} from 'src/utils/datetime/formatters'\n\nexport const removeSpacesAndNow = (input: string): string =>\n input.replace(/\\s/g, '').replace(/now\\(\\)-/, '')\n\nexport const isDurationWithNowParseable = (lower: string): boolean => {\n const durationRegExp = /([0-9]+)(y|mo|w|d|h|ms|s|m|us|µs|ns)/g\n if (!lower || !lower.includes('now()')) {\n return false\n }\n // warning! Using string.match(regex) here instead of regex.test(string) because regex.test() modifies the regex object, and can lead to unexpected behavior\n const removedLower = removeSpacesAndNow(lower)\n\n return !!removedLower.match(durationRegExp)\n}\n\nexport const isDurationParseable = (duration: string): boolean => {\n if (typeof duration !== 'string') {\n return false\n }\n\n const durationRegExp = /^(([0-9]+)(y|mo|w|d|h|ms|s|m|us|µs|ns))+$/g\n\n // warning! Using string.match(regex) here instead of regex.test(string) because regex.test() modifies the regex object, and can lead to unexpected behavior\n\n return !!duration.match(durationRegExp)\n}\n\nexport const parseDuration = (input: string): Duration[] => {\n const result = []\n const durationRegExp = /([0-9]+)(y|mo|w|d|h|ms|s|m|us|µs|ns)/g\n\n // warning! regex.exec(string) modifies the regex it is operating on so that subsequent calls on the same string behave differently\n let match = durationRegExp.exec(input)\n\n if (!match) {\n throw new Error(`could not parse \"${input}\" as duration`)\n }\n\n while (match) {\n result.push({\n magnitude: +match[1],\n unit: match[2],\n })\n\n match = durationRegExp.exec(input)\n }\n\n return result\n}\n\nconst UNIT_TO_APPROX_MS = {\n ns: 1 / 1000000,\n µs: 1 / 1000,\n us: 1 / 1000,\n ms: 1,\n s: 1000,\n m: 1000 * 60,\n h: 1000 * 60 * 60,\n d: 1000 * 60 * 60 * 24,\n w: 1000 * 60 * 60 * 24 * 7,\n mo: 1000 * 60 * 60 * 24 * 30,\n y: 1000 * 60 * 60 * 24 * 365,\n}\n\nexport const durationToMilliseconds = (duration: Duration[]): number =>\n duration.reduce(\n (sum, {magnitude, unit}) => sum + magnitude * UNIT_TO_APPROX_MS[unit],\n 0\n )\n\n/*\n Convert an amount of milliseconds to a duration string.\n\n The returned duration string will use the largest units possible, e.g.\n\n millisecondsToDuration(9_000_000)\n\n Will return `2h30m` rather than `9000000ms`.\n*/\nexport const millisecondsToDuration = (value: number): string => {\n const unitsAndMs = Object.entries(UNIT_TO_APPROX_MS).sort(\n (a, b) => b[1] - a[1]\n ) as [DurationUnit, number][]\n\n const durations: Duration[] = []\n\n let unitIndex = 0\n let remainder = value\n\n while (unitIndex < unitsAndMs.length) {\n const [unit, unitAsMs] = unitsAndMs[unitIndex]\n const valueInUnit = remainder / unitAsMs\n\n durations.push({unit, magnitude: Math.floor(valueInUnit)})\n remainder = remainder - Math.floor(valueInUnit) * unitAsMs\n unitIndex += 1\n }\n\n return durations\n .filter(({magnitude}) => magnitude > 0)\n .reduce((s, {unit, magnitude}) => `${s}${magnitude}${unit}`, '')\n}\n\nexport const areDurationsEqual = (a: string, b: string): boolean => {\n try {\n return (\n durationToMilliseconds(parseDuration(a)) ===\n durationToMilliseconds(parseDuration(b))\n )\n } catch {\n return false\n }\n}\n\nexport const timeRangeToDuration = (timeRange: TimeRange): string => {\n if (timeRange.upper || !timeRange.lower || !timeRange.lower.includes('now')) {\n throw new Error('cannot convert time range to duration')\n }\n\n return removeSpacesAndNow(timeRange.lower)\n}\n\nexport const convertTimeRangeToCustom = (\n timeRange: TimeRange\n): CustomTimeRange => {\n if (timeRange.type === 'custom') {\n return timeRange\n }\n\n const upper = new Date().toISOString()\n let lower = ''\n\n if (timeRange.type === 'selectable-duration') {\n const lowerDate = new Date()\n lowerDate.setSeconds(lowerDate.getSeconds() - timeRange.seconds)\n lower = lowerDate.toISOString()\n } else if (timeRange.type === 'duration') {\n const millisecondDuration = durationToMilliseconds(\n parseDuration(timeRangeToDuration(timeRange))\n )\n const lowerDate = new Date()\n lowerDate.setMilliseconds(lowerDate.getMilliseconds() - millisecondDuration)\n lower = lowerDate.toISOString()\n }\n\n return {\n lower,\n upper,\n type: 'custom',\n }\n}\n\nexport const getTimeRangeLabel = (\n timeRange: TimeRange,\n timeZone?: TimeZone,\n singleDirection?: TimeRangeDirection\n): string => {\n if (timeRange.type === 'selectable-duration') {\n return timeRange.label\n }\n if (timeRange.type === 'duration') {\n return timeRange.lower\n }\n if (timeRange.type === 'custom') {\n const formatter = createDateTimeFormatter(TIME_RANGE_FORMAT, timeZone)\n const lower = formatter.format(new Date(timeRange.lower))\n const upper = formatter.format(new Date(timeRange.upper))\n if (singleDirection === TimeRangeDirection.Upper) {\n return upper\n } else if (singleDirection === TimeRangeDirection.Lower) {\n return lower\n }\n return `${lower} - ${upper}`\n }\n}\n","import {AxisScale, Base} from 'src/types'\n\nexport const MIN_DECIMAL_PLACES = 0\nexport const MAX_DECIMAL_PLACES = 10\n\nexport const AXES_SCALE_OPTIONS = {\n LINEAR: 'linear' as AxisScale,\n LOG: 'log' as AxisScale,\n BASE_2: '2' as Base,\n BASE_10: '10' as Base,\n}\n\nexport const INVALID_DATA_COPY =\n \"The data returned from the query can't be visualized with this graph type.\"\n\nexport const BAND_LINE_OPACITY = 0.7\nexport const BAND_LINE_WIDTH = 3\nexport const BAND_SHADE_OPACITY = 0.3\n\nexport enum LegendDisplayStatus {\n HIDE = 'hide',\n SHOW = 'show',\n}\n\nexport const LEGEND_OPACITY_MINIMUM = 0.2\nexport const LEGEND_OPACITY_MAXIMUM = 1.0\nexport const LEGEND_OPACITY_DEFAULT = LEGEND_OPACITY_MAXIMUM\nexport const LEGEND_OPACITY_STEP = 0.01\n\nexport const LEGEND_ORIENTATION_THRESHOLD_VERTICAL = -1 // Do not use 0 because 0 is falsy and considered \"not set\"\nexport const LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL = 100000000\n\nexport const LEGEND_ORIENTATION_THRESHOLD_DEFAULT =\n LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL\nexport const LEGEND_COLORIZE_ROWS_DEFAULT = true\n\nexport const LEGEND_HIDE_DEFAULT = false\n\nexport const STATIC_LEGEND_HEIGHT_RATIO_MINIMUM = 0.05\nexport const STATIC_LEGEND_HEIGHT_RATIO_MAXIMUM = 0.75\nexport const STATIC_LEGEND_HEIGHT_RATIO_DEFAULT = 0.2\nexport const STATIC_LEGEND_HEIGHT_RATIO_NOT_SET = 0 // 0 is okay here because we want \"not set\"\nexport const STATIC_LEGEND_HEIGHT_RATIO_STEP = 0.01\n\nexport const STATIC_LEGEND_SHOW_DEFAULT = false\n\nexport const STATIC_LEGEND_WIDTH_RATIO_DEFAULT = 1.0\n\nexport const STATIC_LEGEND_CELL_HEIGHT_DEFAULT = 5\n\nexport const STATIC_LEGEND_STYLING = {\n backgroundColor: 'transparent',\n border: 'none',\n style: {padding: '1em 0 0 1em'},\n}\n\nexport const staticLegendTypes = new Set([\n 'xy',\n 'line-plus-single-stat',\n 'band',\n])\n\nexport const TICK_PROPERTY_PREFIX = 'Tick'\nexport const TICK_PROPERTY_SUFFIX = 'Ticks'\n","// Libraries\nimport React, {useState, useEffect, FC} from 'react'\nimport {\n Input,\n DropdownMenu,\n DropdownDivider,\n DropdownItem,\n ClickOutside,\n ComponentStatus,\n Dropdown,\n SquareButton,\n IconFont,\n ButtonGroup,\n} from '@influxdata/clockface'\nimport {isDurationParseable} from 'src/shared/utils/duration'\n\nconst SUGGESTION_CLASS = 'duration-input--suggestion'\n\ntype Props = {\n suggestions: string[]\n onSubmit: (input: string) => void\n value: string\n placeholder?: string\n submitInvalid?: boolean\n showDivider?: boolean\n testID?: string\n validFunction?: (input: string) => boolean\n status?: ComponentStatus\n customClass?: string\n dividerText?: string\n dividerOnClick?: () => void\n menuMaxHeight?: number\n arrowButtonOn?: boolean\n}\n\nconst DurationInput: FC = ({\n suggestions,\n onSubmit,\n value,\n placeholder,\n status: controlledStatus,\n submitInvalid = true,\n showDivider = true,\n testID = 'duration-input',\n validFunction,\n customClass,\n dividerText,\n dividerOnClick,\n menuMaxHeight = 250,\n arrowButtonOn = false,\n}) => {\n const [isFocused, setIsFocused] = useState(false)\n\n const [inputValue, setInputValue] = useState(value)\n\n useEffect(() => {\n setInputValue(value)\n }, [value, setInputValue])\n\n const handleClickSuggestion = (suggestion: string) => {\n setInputValue(suggestion)\n\n onSubmit(suggestion)\n setIsFocused(false)\n }\n\n const handleClickOutside = e => {\n const didClickSuggestion =\n e.target.classList.contains(SUGGESTION_CLASS) ||\n e.target.parentNode.classList.contains(SUGGESTION_CLASS)\n\n if (!didClickSuggestion) {\n setIsFocused(false)\n }\n }\n\n const isValid = (i: string): boolean =>\n validFunction ? validFunction(i) : isDurationParseable(i)\n\n let inputStatus = controlledStatus || ComponentStatus.Default\n\n if (inputStatus === ComponentStatus.Default && !isValid(inputValue)) {\n inputStatus = ComponentStatus.Error\n }\n\n const onChange = (i: string) => {\n setInputValue(i)\n if (submitInvalid || (!submitInvalid && isValid(i))) {\n onSubmit(i)\n }\n }\n\n return (\n
\n \n \n onChange(e.target.value)}\n onFocus={() => setIsFocused(true)}\n onKeyPress={evt => {\n if (evt.key === 'Enter') {\n setIsFocused(false)\n }\n }}\n testID={testID}\n />\n {!!arrowButtonOn && (\n setIsFocused(!isFocused)}\n />\n )}\n \n \n {isFocused && (\n \n {showDivider && dividerText && dividerOnClick && (\n \n {dividerText}\n \n )}\n \n {suggestions.map(s => (\n \n {s}\n \n ))}\n \n )}\n
\n )\n}\n\nexport default DurationInput\n","import React, {FC, useEffect, useRef} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {useSelector} from 'react-redux'\nimport {nanoid} from 'nanoid'\nimport {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\n\nimport {getOrg} from 'src/organizations/selectors'\nimport {fromFlux} from '@influxdata/giraffe'\nimport {FluxResult} from 'src/types/flows'\nimport {propertyTime} from 'src/shared/utils/getMinDurationFromAST'\n\n// Constants\nimport {FLUX_RESPONSE_BYTES_LIMIT} from 'src/shared/constants'\nimport {SELECTABLE_TIME_RANGES} from 'src/shared/constants/timeRanges'\nimport {\n RATE_LIMIT_ERROR_STATUS,\n RATE_LIMIT_ERROR_TEXT,\n GATEWAY_TIMEOUT_STATUS,\n REQUEST_TIMEOUT_STATUS,\n} from 'src/cloud/constants'\nimport {isFlagEnabled, getFlagValue} from 'src/shared/utils/featureFlag'\nimport {notify} from 'src/shared/actions/notifications'\nimport {resultTooLarge} from 'src/shared/copy/notifications'\n\n// Types\nimport {CancellationError, File} from 'src/types'\nimport {RunQueryResult} from 'src/shared/apis/query'\nimport {event} from 'src/cloud/utils/reporting'\n\ninterface CancelMap {\n [key: string]: () => void\n}\n\nexport enum OverrideMechanism {\n Inline,\n AST,\n JSON,\n}\n\nexport interface QueryOptions {\n overrideMechanism: OverrideMechanism\n}\n\nexport interface QueryScope {\n region?: string\n org?: string\n token?: string\n vars?: Record\n params?: Record\n task?: Record\n}\n\ninterface RequestDialect {\n annotations: string[]\n}\n\ninterface RequestBody {\n query: string\n dialect?: RequestDialect\n options?: Record\n extern?: any\n}\n\n/*\n Given an arbitrary text chunk of a Flux CSV, trim partial lines off of the end\n of the text.\n\n For example, given the following partial Flux response,\n\n r,baz,3\n foo,bar,baz,2\n foo,bar,b\n\n we want to trim the last incomplete line, so that the result is\n\n r,baz,3\n foo,bar,baz,2\n\n*/\nconst trimPartialLines = (partialResp: string): string => {\n let i = partialResp.length - 1\n\n while (partialResp[i] !== '\\n') {\n if (i <= 0) {\n return partialResp\n }\n\n i -= 1\n }\n\n return partialResp.slice(0, i + 1)\n}\nexport interface QueryContextType {\n basic: (text: string, override?: QueryScope, options?: QueryOptions) => any\n query: (\n text: string,\n override?: QueryScope,\n options?: QueryOptions\n ) => Promise\n cancel: (id?: string) => void\n}\n\nexport const DEFAULT_CONTEXT: QueryContextType = {\n basic: (_: string, __: QueryScope, ___: QueryOptions) => {},\n query: (_: string, __: QueryScope, ___: QueryOptions) =>\n Promise.resolve({} as FluxResult),\n cancel: (_?: string) => {},\n}\n\nexport const QueryContext =\n React.createContext(DEFAULT_CONTEXT)\n\nconst DESIRED_POINTS_PER_GRAPH = 360\nconst FALLBACK_WINDOW_PERIOD = 15000\n\n// Finds all instances of nodes that match with the test function\n// and returns them as an array\nexport const find = (node: File, test, acc = []) => {\n if (!node) {\n return acc\n }\n\n if (test(node)) {\n acc.push(node)\n }\n\n Object.values(node).forEach(val => {\n if (Array.isArray(val)) {\n val.forEach(_val => {\n find(_val, test, acc)\n })\n } else if (typeof val === 'object') {\n find(val, test, acc)\n }\n })\n\n return acc\n}\n\n// Removes all instances of nodes that match with the test function\n// and returns the nodes that were returned as an array\nexport const remove = (node: File, test, acc = []) => {\n if (!node) {\n return acc\n }\n\n Object.entries(node).forEach(([key, val]) => {\n if (Array.isArray(val)) {\n let ni = 0\n while (ni < val.length) {\n if (test(val[ni])) {\n acc.push(val[ni])\n val.splice(ni, 1)\n continue\n }\n remove(val[ni], test, acc)\n ni++\n }\n } else if (typeof val === 'object') {\n if (val && test(val)) {\n delete node[key]\n } else {\n remove(val, test, acc)\n }\n }\n })\n\n return acc\n}\n\nconst _addWindowPeriod = (ast, optionAST): void => {\n const NOW = Date.now()\n\n const queryRanges = find(\n ast,\n node =>\n node?.callee?.type === 'Identifier' && node?.callee?.name === 'range'\n ).map(node => {\n return (node.arguments[0]?.properties || []).reduce(\n (acc, curr) => {\n if (curr.key.name === 'start') {\n acc.start = propertyTime(ast, curr.value, NOW)\n }\n\n if (curr.key.name === 'stop') {\n acc.stop = propertyTime(ast, curr.value, NOW)\n }\n\n return acc\n },\n {\n start: '',\n stop: NOW,\n }\n )\n })\n\n const windowPeriod = find(\n optionAST,\n node => node?.type === 'Property' && node?.key?.name === 'windowPeriod'\n )\n\n if (!queryRanges.length) {\n windowPeriod.forEach(node => {\n node.value = {\n type: 'DurationLiteral',\n values: [{magnitude: FALLBACK_WINDOW_PERIOD, unit: 'ms'}],\n }\n })\n\n return\n }\n\n const starts = queryRanges.map(t => t.start)\n const stops = queryRanges.map(t => t.stop)\n const cartesianProduct = starts.map(start => stops.map(stop => [start, stop]))\n\n const durations = []\n .concat(...cartesianProduct)\n .map(([start, stop]) => stop - start)\n .filter(d => d > 0)\n\n const queryDuration = Math.min(...durations)\n const foundDuration = SELECTABLE_TIME_RANGES.find(\n tr => tr.seconds * 1000 === queryDuration\n )\n\n if (foundDuration) {\n windowPeriod.forEach(node => {\n node.value = {\n type: 'DurationLiteral',\n values: [{magnitude: foundDuration.windowPeriod, unit: 'ms'}],\n }\n })\n\n return\n }\n\n windowPeriod.forEach(node => {\n node.value = {\n type: 'DurationLiteral',\n values: [\n {\n magnitude: Math.round(queryDuration / DESIRED_POINTS_PER_GRAPH),\n unit: 'ms',\n },\n ],\n }\n })\n}\n\nconst joinOption = (\n ast: any,\n optionName: string,\n defaults: Record = {}\n) => {\n // remove and join duplicate options declared in the query\n const joinedOption = remove(\n ast,\n node =>\n node.type === 'OptionStatement' && node.assignment.id.name === optionName\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, defaults)\n\n const optionVals = Object.entries(joinedOption)\n .map(([k, v]) => `${k}: ${v}`)\n .join(',\\n')\n if (!optionVals.length) {\n return null\n }\n\n return isFlagEnabled('fastFlows')\n ? parseQuery(`option ${optionName} = {\\n${optionVals}\\n}\\n`)\n : parse(`option ${optionName} = {\\n${optionVals}\\n}\\n`)\n}\n\nexport const simplify = (text, vars = {}, params = {}) => {\n try {\n const ast = isFlagEnabled('fastFlows') ? parseQuery(text) : parse(text)\n\n // find all `v.varname` references and apply\n // their default value from `vars`\n // filtering this way prevents flooding the query with all\n // variable definitions on accident and simplifies the filtering\n // logic required to support that by centralizing it here\n const referencedVars = find(\n ast,\n node => node?.type === 'MemberExpression' && node?.object?.name === 'v'\n )\n .map(node => node.property.name)\n .reduce((acc, curr) => {\n acc[curr] = vars[curr]\n return acc\n }, {})\n\n const variableOption = joinOption(ast, 'v', referencedVars)\n\n if (variableOption) {\n ast.body.unshift(variableOption.body[0])\n }\n\n // load in windowPeriod at the last second, because it needs to self reference all the things\n if (referencedVars.hasOwnProperty('windowPeriod')) {\n _addWindowPeriod(ast, variableOption)\n }\n\n // give the same treatment to parameters\n const referencedParams = find(\n ast,\n node =>\n node?.type === 'MemberExpression' && node?.object?.name === 'param'\n )\n .map(node => node.property.name)\n .reduce((acc, curr) => {\n acc[curr] = params[curr]\n return acc\n }, {})\n\n const paramOption = joinOption(ast, 'param', referencedParams)\n\n if (paramOption) {\n ast.body.unshift(paramOption.body[0])\n }\n\n // Join together any duplicate task options\n const taskOption = joinOption(ast, 'task')\n if (taskOption) {\n ast.body.unshift(taskOption.body[0])\n }\n\n // turn it back into a query\n return format_from_js_file(ast)\n } catch {\n return ''\n }\n}\n\nexport const parseQuery = (() => {\n const qs = {}\n\n return q => {\n const key = btoa(q)\n if (!qs[key]) {\n qs[key] = parse(q)\n }\n\n return qs[key]\n }\n})()\n\nconst updateWindowPeriod = (\n query: string,\n override: QueryScope = {},\n mode: 'json' | 'ast' = 'ast'\n) => {\n const options: Record = {}\n\n if (Object.keys(override?.vars ?? {}).length) {\n options.v = override.vars\n }\n if (Object.keys(override?.params ?? {}).length) {\n options.params = override.params\n }\n if (Object.keys(override?.task ?? {}).length) {\n options.task = override.task\n }\n\n const optionTexts = Object.entries(options)\n .map(([k, v]) => {\n const vals = Object.entries(v).map(([_k, _v]) => ` ${_k}: ${_v}`)\n return `option ${k} = {${vals.join(',\\n')}}`\n })\n .join('\\n\\n')\n\n const queryAST = parse(query)\n let optionAST = parse(optionTexts)\n\n // only run this if the query need a windowPeriod\n if (\n !find(\n queryAST,\n node =>\n node?.type === 'MemberExpression' &&\n node?.object?.name === 'v' &&\n node?.property?.name === 'windowPeriod'\n ).length\n ) {\n if (mode === 'ast') {\n return optionAST\n }\n\n return options\n } else if (isFlagEnabled('dontSolveWindowPeriod')) {\n if (options?.v?.timeRangeStart && options?.v?.timeRangeStop) {\n const NOW = Date.now()\n const range = find(\n optionAST,\n node =>\n node?.type === 'OptionStatement' && node?.assignment?.id?.name === 'v'\n ).reduce(\n (acc, curr) => {\n acc.start =\n find(\n curr,\n n => n.type === 'Property' && n?.key?.name === 'timeRangeStart'\n )[0]?.value ?? acc.start\n\n acc.stop =\n find(\n curr,\n n => n.type === 'Property' && n?.key?.name === 'timeRangeStop'\n )[0]?.value ?? acc.stop\n\n return acc\n },\n {\n start: null,\n stop: null,\n }\n )\n const duration =\n propertyTime(queryAST, range.stop, NOW) -\n propertyTime(queryAST, range.start, NOW)\n const foundDuration = SELECTABLE_TIME_RANGES.find(\n tr => tr.seconds * 1000 === duration\n )\n\n if (foundDuration) {\n options.v.windowPeriod = `${foundDuration.windowPeriod} ms`\n } else {\n options.v.windowPeriod = `${Math.round(\n duration / DESIRED_POINTS_PER_GRAPH\n )} ms`\n }\n } else {\n options.v.windowPeriod = `${FALLBACK_WINDOW_PERIOD} ms`\n }\n\n // write the mutations back out into the AST\n optionAST = parse(\n Object.entries(options)\n .map(([k, v]) => {\n const vals = Object.entries(v).map(([_k, _v]) => ` ${_k}: ${_v}`)\n return `option ${k} = {${vals.join(',\\n')}}`\n })\n .join('\\n\\n')\n )\n }\n\n try {\n const _optionAST = JSON.parse(JSON.stringify(optionAST))\n // make sure there's a variable in there named windowPeriod so later logic doesnt bail\n find(\n _optionAST,\n node =>\n node?.type === 'OptionStatement' && node?.assignment?.id?.name === 'v'\n ).forEach(node => {\n if (\n find(\n node,\n n => n.type === 'Property' && n?.key?.name === 'windowPeriod'\n ).length\n ) {\n return\n }\n\n if (isFlagEnabled('dontSolveWindowPeriod')) {\n throw new Error('v.windowPeriod is used and not defined')\n }\n\n node.assignment.init.properties.push({\n type: 'Property',\n key: {\n type: 'Identifier',\n name: 'windowPeriod',\n },\n value: {\n type: 'DurationLiteral',\n values: [{magnitude: FALLBACK_WINDOW_PERIOD, unit: 'ms'}],\n },\n })\n })\n\n const substitutedAST = {\n package: '',\n type: 'Package',\n files: [queryAST, _optionAST],\n }\n\n // use the whole query to get that option set by reference\n _addWindowPeriod(substitutedAST, _optionAST)\n\n if (mode === 'ast') {\n return _optionAST\n }\n\n // TODO write window period back out to json object\n return options\n } catch (e) {\n // there's a bunch of weird errors until we replace windowPeriod\n console.error(e)\n if (mode === 'ast') {\n return optionAST\n }\n return options\n }\n}\n\nexport const QueryProvider: FC = ({children}) => {\n const dispatch = useDispatch()\n const pending = useRef({} as CancelMap)\n const org = useSelector(getOrg)\n\n // this one cancels all pending queries when you\n // navigate away from the query provider\n useEffect(() => {\n return () => {\n Object.values(pending.current).forEach(c => c())\n }\n }, [])\n\n const basic = (text: string, override: QueryScope, options: QueryOptions) => {\n const mechanism = options?.overrideMechanism ?? OverrideMechanism.AST\n const query =\n mechanism === OverrideMechanism.Inline\n ? simplify(text, override?.vars ?? {}, override?.params ?? {})\n : text\n\n const orgID = override?.org || org.id\n\n const url = `${\n override?.region || window.location.origin\n }/api/v2/query?${new URLSearchParams({orgID})}`\n\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept-Encoding': 'gzip',\n }\n\n if (override?.token) {\n headers['Authorization'] = `Token ${override.token}`\n }\n\n const body: RequestBody = {\n query,\n dialect: {annotations: ['group', 'datatype', 'default']},\n }\n\n if (mechanism === OverrideMechanism.AST) {\n const options = updateWindowPeriod(query, override, 'ast')\n if (options && Object.keys(options).length) {\n body.extern = options\n }\n }\n if (mechanism === OverrideMechanism.JSON) {\n const options = updateWindowPeriod(query, override, 'json')\n if (options && Object.keys(options).length) {\n body.options = options\n }\n }\n\n const controller = new AbortController()\n\n const id = nanoid()\n const promise = fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n .then(async (response: Response): Promise => {\n if (response.status === 200) {\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n\n let csv = ''\n let bytesRead = 0\n let didTruncate = false\n let read = await reader.read()\n\n const BYTE_LIMIT =\n getFlagValue('increaseCsvLimit') ?? FLUX_RESPONSE_BYTES_LIMIT\n\n while (!read.done) {\n const text = decoder.decode(read.value)\n\n bytesRead += read.value.byteLength\n\n if (bytesRead > BYTE_LIMIT) {\n csv += trimPartialLines(text)\n didTruncate = true\n break\n } else {\n csv += text\n read = await reader.read()\n }\n }\n\n reader.cancel()\n\n return {\n type: 'SUCCESS',\n csv,\n bytesRead,\n didTruncate,\n }\n }\n\n if (response.status === RATE_LIMIT_ERROR_STATUS) {\n const retryAfter = response.headers.get('Retry-After')\n\n return Promise.resolve({\n type: 'RATE_LIMIT_ERROR',\n retryAfter: retryAfter ? parseInt(retryAfter) : null,\n message: RATE_LIMIT_ERROR_TEXT,\n })\n }\n\n return response.text().then(text => {\n try {\n const json = JSON.parse(text)\n const message = json.message || json.error\n const code = json.code\n\n switch (code) {\n case REQUEST_TIMEOUT_STATUS:\n event('query timeout')\n break\n case GATEWAY_TIMEOUT_STATUS:\n event('gateway timeout')\n break\n default:\n event('query error')\n }\n\n return {type: 'UNKNOWN_ERROR', message, code}\n } catch {\n return {\n type: 'UNKNOWN_ERROR',\n message: 'Failed to execute Flux query',\n }\n }\n })\n })\n .catch(e => {\n if (e.name === 'AbortError') {\n return Promise.reject(new CancellationError())\n }\n\n return Promise.reject(e)\n })\n\n pending.current[id] = () => {\n controller.abort()\n }\n\n return {\n id,\n promise,\n cancel: () => {\n cancel(id)\n },\n }\n }\n\n const cancel = (queryID?: string) => {\n if (!queryID) {\n Object.values(pending.current).forEach(c => c())\n pending.current = {}\n return\n }\n\n if (!pending.current.hasOwnProperty(queryID)) {\n return\n }\n\n pending.current[queryID]()\n\n delete pending.current[queryID]\n }\n\n const query = (\n text: string,\n override: QueryScope,\n options: QueryOptions\n ): Promise => {\n const result = basic(text, override, options)\n\n const promise: any = result.promise\n .then(raw => {\n if (raw.type !== 'SUCCESS') {\n throw new Error(raw.message)\n }\n\n if (raw.didTruncate) {\n dispatch(notify(resultTooLarge(raw.bytesRead)))\n }\n\n return raw\n })\n .then(raw => fromFlux(raw.csv))\n .then(\n parsed =>\n ({\n source: text,\n parsed,\n error: null,\n } as FluxResult)\n )\n\n promise.cancel = result.cancel\n return promise\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport default QueryProvider\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType, GenBucket, Bucket} from 'src/types'\nimport {labelSchema} from './labels'\n\n// Utils\nimport {ruleToString} from 'src/utils/formatting'\n\nexport const getReadableRetention = (bucket: GenBucket): string => {\n const expire = bucket.retentionRules?.find(rule => rule.type === 'expire')\n\n if (!expire) {\n return 'forever'\n }\n\n return ruleToString(expire.everySeconds)\n}\n\n// Defines the schema for the \"buckets\" resource\nexport const bucketSchema = new schema.Entity(\n ResourceType.Buckets,\n {\n labels: [labelSchema],\n },\n {\n processStrategy: (bucket: GenBucket): Omit => {\n return {\n ...bucket,\n readableRetention: getReadableRetention(bucket),\n }\n },\n }\n)\nexport const arrayOfBuckets = [bucketSchema]\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n/* Members */\n\n// Defines the schema for the \"members\" resource\nexport const memberSchema = new schema.Entity(ResourceType.Members)\nexport const arrayOfMembers = [memberSchema]\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n/* Organizations */\n\n// Defines the schema for the \"organizations\" resource\nexport const orgSchema = new schema.Entity(ResourceType.Orgs)\nexport const arrayOfOrgs = [orgSchema]\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n/* Scrapers */\n\n// Defines the schema for the \"scrapers\" resource\n\nexport const scraperSchema = new schema.Entity(ResourceType.Scrapers)\nexport const arrayOfScrapers = [scraperSchema]\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n// Schemas\nimport {labelSchema} from './labels'\n\n// Defines the schema for the \"templates\" resource\nexport const templateSchema = new schema.Entity(ResourceType.Templates, {\n labels: [labelSchema],\n})\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./StaticLegend.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {ChangeEvent, FC, useState} from 'react'\n\n// Utils\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\n\n// Components\nimport {\n Appearance,\n ButtonShape,\n Columns,\n ComponentSize,\n Form,\n Grid,\n InputLabel,\n InputToggleType,\n RangeSlider,\n SelectGroup,\n Toggle,\n} from '@influxdata/clockface'\nimport {\n OrientationToggle,\n OpacitySlider,\n ColorizeRowsToggle,\n} from 'src/visualization/components/internal/LegendOptions'\n\n// Types\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {\n BandViewProperties,\n LinePlusSingleStatProperties,\n StaticLegend as StaticLegendType,\n XYViewProperties,\n} from 'src/types'\n\n// Constants\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_OPACITY_MAXIMUM,\n LEGEND_OPACITY_MINIMUM,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL,\n LEGEND_ORIENTATION_THRESHOLD_VERTICAL,\n LegendDisplayStatus,\n STATIC_LEGEND_HEIGHT_RATIO_MAXIMUM,\n STATIC_LEGEND_HEIGHT_RATIO_MINIMUM,\n STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n STATIC_LEGEND_HEIGHT_RATIO_STEP,\n STATIC_LEGEND_SHOW_DEFAULT,\n STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} from 'src/visualization/constants'\n\n// Metrics\nimport {event} from 'src/cloud/utils/reporting'\n\n// Styles\nimport 'src/visualization/components/internal/StaticLegend.scss'\n\nconst eventPrefix = 'visualization.customize.staticlegend'\n\ninterface Props extends VisualizationOptionProps {\n properties:\n | BandViewProperties\n | XYViewProperties\n | LinePlusSingleStatProperties\n}\n\nconst StaticLegend: FC = ({properties, update}) => {\n const {\n staticLegend = {\n colorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity: LEGEND_OPACITY_DEFAULT,\n orientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show: STATIC_LEGEND_SHOW_DEFAULT,\n widthRatio: STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n } as StaticLegendType,\n } = properties\n const {valueAxis} = staticLegend\n const {\n colorizeRows = false, // undefined is considered false because of omitempty\n heightRatio = STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity = LEGEND_OPACITY_DEFAULT,\n orientationThreshold = LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show,\n } = staticLegend\n const [showOptions, setShowOptions] = useState(show)\n\n const handleChooseStaticLegend = (value: string) => {\n setShowOptions(value === LegendDisplayStatus.SHOW)\n update({\n staticLegend: {\n ...staticLegend,\n show: value === LegendDisplayStatus.SHOW,\n },\n })\n event(`${eventPrefix}.${value}`, {\n type: properties.type,\n })\n }\n\n const handleSetHeightRatio = (e: ChangeEvent): void => {\n const value = convertUserInputToNumOrNaN(e)\n\n if (isNaN(value) || value < STATIC_LEGEND_HEIGHT_RATIO_MINIMUM) {\n update({\n staticLegend: {\n ...staticLegend,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n },\n })\n event(`${eventPrefix}.heightRatio`, {\n type: properties.type,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n })\n } else {\n update({\n staticLegend: {...staticLegend, heightRatio: value},\n })\n event(`${eventPrefix}.heightRatio`, {\n type: properties.type,\n heightRatio: value,\n })\n }\n }\n\n const convertHeightRatioToPercentage = (heightRatio: number): string =>\n `Height: ${(heightRatio * 100).toFixed(0)}%`\n\n const handleSetValueAxis = (valueAxis: string): void => {\n update({\n staticLegend: {...staticLegend, valueAxis},\n })\n }\n\n const handleSetOrientation = (threshold: number): void => {\n let validThreshold: number\n if (\n typeof threshold !== 'number' ||\n threshold !== threshold ||\n threshold > 0\n ) {\n validThreshold = LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL\n } else {\n validThreshold = LEGEND_ORIENTATION_THRESHOLD_VERTICAL\n }\n update({\n staticLegend: {...staticLegend, orientationThreshold: validThreshold},\n })\n // eventing is done by because\n // UI's definition of orientation is either horizontal or vertical\n // which is less intricate than Giraffe's\n }\n\n const handleSetOpacity = (e: ChangeEvent): void => {\n const value = convertUserInputToNumOrNaN(e)\n\n if (isNaN(value) || value < LEGEND_OPACITY_MINIMUM) {\n update({\n staticLegend: {...staticLegend, opacity: LEGEND_OPACITY_MAXIMUM},\n })\n event(`${eventPrefix}.opacity`, {\n type: properties.type,\n opacity: LEGEND_OPACITY_MAXIMUM,\n })\n } else {\n update({\n staticLegend: {...staticLegend, opacity: value},\n })\n event(`${eventPrefix}.opacity`, {\n type: properties.type,\n opacity: value,\n })\n }\n }\n\n const handleSetColorization = (): void => {\n update({\n staticLegend: {\n ...staticLegend,\n colorizeRows: !colorizeRows,\n },\n })\n event(`${eventPrefix}.colorizeRows.${!colorizeRows}`, {\n type: properties.type,\n })\n }\n\n return (\n \n \n \n \n \n \n Hide\n \n \n Show\n \n \n \n \n {showOptions && (\n \n \n \n \n \n \n Displayed Value\n \n \n \n Latest Y Axis\n \n \n \n \n Latest X Axis\n \n \n \n \n \n \n \n )}\n \n \n )\n}\n\nexport default StaticLegend\n","// TODO: handle these any types\n\nimport {TimeZone} from 'src/types'\nimport {STRICT_ISO8061_TIME_FORMAT} from 'src/utils/datetime/constants'\n\nconst dateTimeOptions: any = {\n hourCycle: 'h23',\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n}\n\nconst timeOptions: any = {\n hourCycle: 'h23',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n}\n\ninterface Division {\n ms: number\n scale: Intl.RelativeTimeFormatUnit\n}\n\nconst relativeDivisions: Division[] = [\n {scale: 'years', ms: 31536000000},\n {scale: 'months', ms: 2628000000},\n {scale: 'days', ms: 86400000},\n {scale: 'hours', ms: 3600000},\n {scale: 'minutes', ms: 60000},\n {scale: 'seconds', ms: 1000},\n]\n\nexport const createRelativeFormatter = (\n numeric: Intl.RelativeTimeFormatNumeric = 'always'\n) => {\n const formatter = new Intl.RelativeTimeFormat('en-us', {\n numeric,\n })\n\n const formatDateRelative = (date: Date) => {\n const millisecondsAgo = date.getTime() - Date.now()\n\n for (const {scale, ms} of relativeDivisions) {\n if (Math.abs(millisecondsAgo) >= ms || scale === 'seconds') {\n return formatter.format(Math.round(millisecondsAgo / ms), scale)\n }\n }\n }\n\n return {\n formatRelative: formatDateRelative,\n }\n}\n\nexport const createDateTimeFormatter = (\n format: string,\n timeZone: TimeZone = 'Local'\n) => {\n switch (format) {\n default: {\n if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {\n console.warn(\n 'createDateTimeFormatter: the format argument provided is either invalid or not supported at the moment.'\n )\n }\n break\n }\n\n case STRICT_ISO8061_TIME_FORMAT: {\n return {\n format: date => date,\n }\n }\n\n case 'YYYY-MM-DD': {\n const options = {\n ...dateTimeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY-MM-DD hh:mm:ss a': {\n const options = {\n ...dateTimeOptions,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n\n const formatter = Intl.DateTimeFormat('en-us', options)\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY-MM-DD hh:mm:ss a ZZ': {\n const options = {\n ...dateTimeOptions,\n timeZoneName: 'short',\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second} ${dateParts.dayPeriod} ${dateParts.timeZoneName}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY-MM-DD HH:mm:ss': {\n const options = {\n ...dateTimeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY-MM-DD HH:mm:ss.sss': {\n const options = {\n ...dateTimeOptions,\n fractionalSecondDigits: 3,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}.${dateParts.fractionalSecond}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY-MM-DD HH:mm': {\n const options = {\n ...dateTimeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}-${dateParts.month}-${dateParts.day} ${dateParts.hour}:${dateParts.minute}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'DD/MM/YYYY HH:mm:ss.sss': {\n const options = {\n ...dateTimeOptions,\n fractionalSecondDigits: 3,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.day}/${dateParts.month}/${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}.${dateParts.fractionalSecond}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'DD/MM/YYYY hh:mm:ss.sss a': {\n const options = {\n ...dateTimeOptions,\n fractionalSecondDigits: 3,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.day}/${dateParts.month}/${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}.${dateParts.fractionalSecond} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'MM/DD/YYYY HH:mm:ss.sss': {\n const options = {\n ...dateTimeOptions,\n fractionalSecondDigits: 3,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.month}/${dateParts.day}/${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}.${dateParts.fractionalSecond}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'MM/DD/YYYY hh:mm:ss.sss a': {\n const options = {\n ...dateTimeOptions,\n fractionalSecondDigits: 3,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.month}/${dateParts.day}/${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}.${dateParts.fractionalSecond} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY/MM/DD HH:mm:ss': {\n const options = {\n ...dateTimeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}/${dateParts.month}/${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'YYYY/MM/DD hh:mm:ss a': {\n const options = {\n ...dateTimeOptions,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.year}/${dateParts.month}/${dateParts.day} ${dateParts.hour}:${dateParts.minute}:${dateParts.second} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n /** ****************** LONG DATE FORMATTING ********************/\n\n case 'MMMM D, YYYY HH:mm:ss': {\n const options = {\n ...dateTimeOptions,\n month: 'long',\n day: 'numeric',\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.month} ${dateParts.day}, ${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'MMMM D, YYYY hh:mm:ss a': {\n const options = {\n ...dateTimeOptions,\n month: 'long',\n day: 'numeric',\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.month} ${dateParts.day}, ${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'dddd, MMMM D, YYYY HH:mm:ss': {\n const options = {\n ...dateTimeOptions,\n month: 'long',\n day: 'numeric',\n weekday: 'long',\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.weekday}, ${dateParts.month} ${dateParts.day}, ${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n case 'dddd, MMMM D, YYYY hh:mm:ss a': {\n const options = {\n ...dateTimeOptions,\n month: 'long',\n day: 'numeric',\n weekday: 'long',\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatDate = date => {\n const parts = formatter.formatToParts(date)\n const dateParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n dateParts[part.type] = part.value\n })\n\n return `${dateParts.weekday}, ${dateParts.month} ${dateParts.day}, ${dateParts.year} ${dateParts.hour}:${dateParts.minute}:${dateParts.second} ${dateParts.dayPeriod}`\n }\n\n return {\n format: formatDate,\n }\n }\n\n /** ****************** TIME FORMATTING ********************/\n\n case 'HH:mm': {\n const options = {\n ...timeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'hh:mm a': {\n const options = {\n ...timeOptions,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute} ${timeParts.dayPeriod}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'HH:mm:ss': {\n const options = {\n ...timeOptions,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'hh:mm:ss a': {\n const options = {\n ...timeOptions,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second} ${timeParts.dayPeriod}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'HH:mm:ss ZZ': {\n const options = {\n ...timeOptions,\n timeZoneName: 'short',\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second} ${timeParts.timeZoneName}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'hh:mm:ss a ZZ': {\n const options = {\n ...timeOptions,\n timeZoneName: 'short',\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second} ${timeParts.dayPeriod} ${timeParts.timeZoneName}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'HH:mm:ss.sss': {\n const options = {\n ...timeOptions,\n fractionalSecondDigits: 3,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second}.${timeParts.fractionalSecond}`\n }\n\n return {\n format: formatTime,\n }\n }\n\n case 'hh:mm:ss.sss a': {\n const options = {\n ...timeOptions,\n fractionalSecondDigits: 3,\n hour12: true,\n }\n\n if (timeZone === 'UTC') {\n options.timeZone = 'UTC'\n }\n const formatter = Intl.DateTimeFormat('en-us', options)\n\n const formatTime = date => {\n const parts = formatter.formatToParts(date)\n const timeParts: any = {}\n\n parts\n .filter(part => part.type !== 'literal')\n .forEach(part => {\n timeParts[part.type] = part.value\n })\n\n return `${timeParts.hour}:${timeParts.minute}:${timeParts.second}.${timeParts.fractionalSecond} ${timeParts.dayPeriod}`\n }\n\n return {\n format: formatTime,\n }\n }\n }\n}\n\nexport const convertDateToRFC3339 = (date: Date, timeZone: string): string => {\n if (!date || date.toDateString() === 'Invalid Date') {\n return date.toDateString()\n }\n\n if (timeZone === 'Local') {\n const year = date.getFullYear()\n const month =\n date.getMonth() + 1 < 10\n ? `0${date.getMonth() + 1}`\n : `${date.getMonth() + 1}`\n const dayOfMonth =\n date.getDate() < 10 ? `0${date.getDate()}` : `${date.getDate()}`\n\n const timeStringParsed = date.toTimeString().split(' ')\n const localTime = timeStringParsed[0]\n const utcOffset = timeStringParsed[1].replace('GMT', '')\n\n return `${year}-${month}-${dayOfMonth}T${localTime}${utcOffset}`\n }\n return date.toISOString()\n}\n","// Libraries\nimport {get} from 'lodash'\n\nexport const getErrorMessage = (e: any) => {\n let message = get(e, 'response.data.error.message')\n\n if (!message) {\n message = get(e, 'response.data.error')\n }\n\n if (!message) {\n message = get(e, 'response.headers.x-influx-error')\n }\n\n if (!message) {\n message = get(e, 'response.data.message')\n }\n\n if (!message) {\n message = get(e, 'message')\n }\n\n if (!message && Array.isArray(e)) {\n const error = e.find(err => err.status >= 400)\n message = get(error, 'data.message')\n }\n\n if (!message) {\n message = 'unknown error'\n }\n\n return message\n}\n","import React, {FC, createContext, useContext, useState} from 'react'\nimport {FlowContext} from 'src/flows/context/flow.current'\nimport {ControlSection, Submenu} from 'src/types/flows'\n\ninterface ContextType {\n id: string\n menu: ControlSection[]\n submenu?: Submenu['menu']\n show: (id: string) => void\n hide: () => void\n showSub: (menu: Submenu['menu']) => void\n hideSub: () => void\n register: (id: string, menu: ControlSection[]) => void\n}\n\nconst DEFAULT_CONTEXT: ContextType = {\n id: '',\n menu: [],\n show: _ => {},\n hide: () => {},\n showSub: _ => {},\n hideSub: () => {},\n register: (_, __) => {},\n}\n\nexport const SidebarContext = createContext(DEFAULT_CONTEXT)\n\nexport const SidebarProvider: FC = ({children}) => {\n const {flow} = useContext(FlowContext)\n const [focused, setFocused] = useState('')\n const [pipes, setPipes] = useState({})\n const [sub, setSub] = useState(false as Submenu['menu'] | null)\n\n const show = (id: string) => {\n if (!flow.data.allIDs.includes(id)) {\n return\n }\n\n if (id === focused) {\n return\n }\n\n setFocused(id)\n if (sub) {\n setSub(false)\n }\n }\n\n const hide = () => {\n setFocused('')\n }\n\n const register = (id: string, menu: ControlSection[]) => {\n if (!pipes[id] || pipes[id] !== menu) {\n pipes[id] = menu || []\n setPipes({\n ...pipes,\n })\n }\n }\n\n const showSub = (menu: Submenu['menu']) => {\n setSub(menu)\n }\n\n const hideSub = () => {\n setSub(false)\n setFocused('')\n }\n\n const menu = pipes[focused] || []\n\n return (\n \n {children}\n \n )\n}\n","export const formatDownloadName = (filename: string, extension: string) => {\n return `${filename.trim().toLowerCase().replace(/\\s/g, '_')}${extension}`\n}\n\nexport const downloadTextFile = (\n text: string,\n filename: string,\n extension: string,\n mimeType: string = 'text/plain'\n) => {\n const formattedName = formatDownloadName(filename, extension)\n\n const blob = new Blob([text], {type: mimeType})\n const a = document.createElement('a')\n\n a.href = window.URL.createObjectURL(blob)\n a.target = '_blank'\n a.download = formattedName\n\n document.body.appendChild(a)\n a.click()\n a.parentNode.removeChild(a)\n}\n\nexport const downloadImage = (uri: string, filename: string) => {\n const link = document.createElement('a')\n\n if (typeof link.download === 'string') {\n link.href = uri\n link.download = filename\n\n // Firefox requires the link to be in the body\n document.body.appendChild(link)\n\n link.click()\n\n document.body.removeChild(link)\n } else {\n window.open(uri)\n }\n}\n","import {\n StatusRule,\n NotificationRuleBase,\n TagRule,\n SlackNotificationEndpoint,\n PagerDutyNotificationEndpoint,\n HTTPNotificationEndpoint,\n SlackNotificationRuleBase,\n SMTPNotificationRuleBase,\n PagerDutyNotificationRuleBase,\n HTTPNotificationRuleBase,\n Check as GCheck,\n ThresholdCheck as GThresholdCheck,\n DeadmanCheck as GDeadmanCheck,\n CustomCheck as GenCustomCheck,\n NotificationRule as GRule,\n NotificationEndpoint as GEndpoint,\n TaskStatusType,\n Threshold,\n CheckBase as GenCheckBase,\n NotificationEndpointBase as GenEndpointBase,\n TelegramNotificationRuleBase,\n TelegramNotificationEndpoint,\n} from 'src/client'\n\nimport {RemoteDataState} from 'src/types'\nimport {ResourceType} from './resources'\n\ntype Omit = Pick>\ntype Overwrite = Omit & U\n\ninterface WithClientID {\n cid: string\n value: T\n}\n\nexport type ColumnTypes =\n | ResourceType.NotificationRules\n | ResourceType.NotificationEndpoints\n | ResourceType.Checks\n\n/* Endpoints */\ntype EndpointOverrides = {\n status: RemoteDataState\n activeStatus: TaskStatusType\n labels: string[]\n}\n// GenEndpoint is the shape of a NotificationEndpoint from the server -- before any UI specific fields are added or modified\nexport type GenEndpoint = GEndpoint\nexport type NotificationEndpoint =\n | (Omit & EndpointOverrides)\n | (Omit &\n EndpointOverrides)\n | (Omit & EndpointOverrides)\n | (Omit &\n EndpointOverrides)\nexport type NotificationEndpointBase = Omit &\n EndpointOverrides\n\n/* Rule */\ntype RuleOverrides = {status: RemoteDataState; activeStatus: TaskStatusType}\n\n// GenRule is the shape of a NotificationRule from the server -- before any UI specific fields are added or modified\nexport type GenRule = GRule\nexport type NotificationRule = GenRule & RuleOverrides\n\nexport type StatusRuleDraft = WithClientID\n\nexport type TagRuleDraft = WithClientID\n\nexport type NotificationRuleBaseDraft = Overwrite<\n NotificationRuleBase,\n {\n id?: string\n status: RemoteDataState\n activeStatus: TaskStatusType\n statusRules: StatusRuleDraft[]\n tagRules: TagRuleDraft[]\n labels?: string[]\n taskID?: string\n }\n>\n\ntype RuleDraft = SlackRule | SMTPRule | PagerDutyRule | HTTPRule | TelegramRule\n\nexport type NotificationRuleDraft = RuleDraft\n\ntype SlackRule = NotificationRuleBaseDraft &\n SlackNotificationRuleBase &\n RuleOverrides\n\ntype SMTPRule = NotificationRuleBaseDraft &\n SMTPNotificationRuleBase &\n RuleOverrides\n\ntype PagerDutyRule = NotificationRuleBaseDraft &\n PagerDutyNotificationRuleBase &\n RuleOverrides\n\ntype HTTPRule = NotificationRuleBaseDraft &\n HTTPNotificationRuleBase &\n RuleOverrides\n\ntype TelegramRule = NotificationRuleBaseDraft &\n TelegramNotificationRuleBase &\n RuleOverrides\n\nexport type LowercaseCheckStatusLevel =\n | 'crit'\n | 'warn'\n | 'info'\n | 'ok'\n | 'unknown'\n\n// The data for a row in the status history table\nexport interface StatusRow {\n time: number\n level: LowercaseCheckStatusLevel\n checkID: string\n checkName: string\n message: string\n}\n\n// The data for a row in the notification history table\nexport interface NotificationRow {\n time: number\n level: LowercaseCheckStatusLevel\n checkID: string\n checkName: string\n notificationRuleID: string\n notificationRuleName: string\n notificationEndpointID: string\n notificationEndpointName: string\n sent: 'true' | 'false' // See https://github.com/influxdata/idpe/issues/4645\n}\n\n/* Checks */\ntype CheckOverrides = {\n status: RemoteDataState\n activeStatus: TaskStatusType\n labels: string[]\n taskID?: string\n}\nexport type CheckBase = Omit & CheckOverrides\n\n// GenCheck is the shape of a Check from the server -- before UI specific properties are added\nexport type GenCheck = GCheck\nexport type GenThresholdCheck = GThresholdCheck\nexport type GenDeadmanCheck = GDeadmanCheck\n\nexport type ThresholdCheck = Omit &\n CheckOverrides\n\nexport type DeadmanCheck = Omit &\n CheckOverrides\n\nexport type CustomCheck = Omit &\n CheckOverrides\n\nexport type Check = ThresholdCheck | DeadmanCheck | CustomCheck\n\nexport type CheckType = Check['type']\n\nexport type ThresholdType = Threshold['type']\n\nexport type CheckTagSet = ThresholdCheck['tags'][0]\n\nexport type AlertHistoryType = 'statuses' | 'notifications'\n\nexport type HTTPMethodType = HTTPNotificationEndpoint['method']\nexport type HTTPAuthMethodType = HTTPNotificationEndpoint['authMethod']\n\nexport {\n Threshold,\n StatusRule,\n TagRule,\n PostCheck,\n CheckStatusLevel,\n RuleStatusLevel,\n GreaterThreshold,\n LesserThreshold,\n RangeThreshold,\n PostNotificationEndpoint,\n NotificationRuleBase,\n NotificationRuleUpdate,\n NotificationEndpointType,\n SMTPNotificationRuleBase,\n SlackNotificationRuleBase,\n PagerDutyNotificationRuleBase,\n HTTPNotificationRuleBase,\n SMTPNotificationRule,\n SlackNotificationRule,\n PagerDutyNotificationRule,\n HTTPNotificationRule,\n PagerDutyNotificationEndpoint,\n SlackNotificationEndpoint,\n HTTPNotificationEndpoint,\n NotificationEndpointUpdate,\n PostNotificationRule,\n CheckPatch,\n TaskStatusType,\n TelegramNotificationEndpoint,\n TelegramNotificationRuleBase,\n TelegramNotificationRule,\n} from '../client'\n","export const getRootNode = () => document.getElementById('react-root')\n","export const LOGIN = '/login'\nexport const LOGOUT = '/logout'\nexport const SIGNIN = '/signin'\n\nexport const BUCKETS = 'buckets'\nexport const BUCKET_ID = ':bucketID'\n\nexport const DASHBOARDS = 'dashboards'\nexport const DASHBOARD_ID = ':dashboardID'\n\nexport const ORGS = 'orgs'\nexport const ORG_ID = ':orgID'\n\nexport const CONTENT_ID = ':contentID'\n\nexport const SECRETS = 'secrets'\n\nexport const SCRAPERS = 'scrapers'\n\nexport const SETTINGS = 'settings'\n\nexport const TELEGRAFS = 'telegrafs'\n\nexport const TOKENS = 'tokens'\n\nexport const VARIABLES = 'variables'\n\nexport const ANNOTATIONS = 'annotations'\n\nexport const TEMPLATES = 'templates'\n\nexport const LOAD_DATA = 'load-data'\n\nexport const LABELS = 'labels'\n\nexport const FILE_UPLOAD = 'file-upload'\nexport const CLIENT_LIBS = 'client-libraries'\nexport const TELEGRAF_PLUGINS = 'telegraf-plugins'\nexport const DEVELOPER_TOOLS = 'developer-tools'\nexport const INTEGRATIONS = 'integrations'\n\nexport const DATA_EXPLORER = 'data-explorer'\n\nexport const SUBSCRIPTIONS = 'subscriptions'\n","export {Authorization, AuthorizationUpdateRequest, Permission} from 'src/client'\n\nexport enum Auth0Connection {\n Google = 'google-oauth2',\n Microsoft = 'windowslive',\n Authentication = 'Username-Password-Authentication',\n}\n","import {CustomTimeRange} from 'src/types'\n\nexport enum AutoRefreshStatus {\n Active = 'active',\n Disabled = 'disabled',\n Paused = 'paused',\n}\n\nexport interface AutoRefresh {\n status: AutoRefreshStatus\n interval: number\n duration?: CustomTimeRange | null\n inactivityTimeout?: number | null\n infiniteDuration: boolean\n label?: string\n}\n","import {\n Account,\n CreditCardParams as GenCreditCardParams,\n} from 'src/client/unityRoutes'\nexport {\n BillingContact,\n BillingInfo,\n BillingNotifySettings,\n CreditCardParams,\n Invoice,\n Invoices,\n Marketplace,\n PaymentMethod,\n UsageVectors,\n UsageVector,\n} from 'src/client/unityRoutes'\n\nexport type BillingProvider = Account['billingProvider']\n\nexport interface ZuoraResponse {\n success: boolean\n responseFrom: string\n refId: string\n}\n\nexport type ZuoraResponseHandler = (response: ZuoraResponse) => void\n\nexport interface ZuoraClient {\n render: (\n zuoraParams: GenCreditCardParams,\n formFields: {},\n onSubmit: ZuoraResponseHandler\n ) => void\n submit: () => void\n}\n","export {Bucket as GenBucket} from 'src/client'\n\nimport {Bucket as GenBucket} from 'src/client'\n\nexport interface OwnBucket extends Omit {\n labels?: string[]\n readableRetention: string\n // bucket type 'sample' is hardcoded in the frontend:\n // src/shared/contexts/buckets.tsx\n readonly type?: 'user' | 'system' | 'sample'\n}\n\nexport type Bucket = OwnBucket\n\nexport type RetentionRule = GenBucket['retentionRules'][0]\n\nexport type LineProtocolTab = 'Upload File' | 'Enter Manually'\n\nexport enum WritePrecision {\n Ms = 'ms',\n S = 's',\n Us = 'us',\n Ns = 'ns',\n}\n","// Write Data Modes\nexport enum WriteDataMode {\n Manual = 'Manual Entry',\n File = 'File Upload',\n}\n","// function definitions\nimport {Source} from 'src/types'\n\nexport type OnDeleteFuncNode = (ids: DeleteFuncNodeArgs) => void\nexport type OnChangeArg = (inputArg: InputArg) => void\nexport type OnAddNode = (\n bodyID: string,\n funcName: string,\n declarationID: string\n) => void\nexport type OnToggleYield = (\n bodyID: string,\n declarationID: string,\n funcNodeIndex: number\n) => void\nexport type OnGenerateScript = () => void\nexport type OnChangeScript = (script: string) => void\nexport type ScriptUpToYield = (\n bodyID: string,\n declarationID: string,\n yieldNodeIndex: number,\n isYieldable: boolean\n) => string\nexport type OnDeleteBody = (bodyID: string) => void\n\nexport interface ScriptStatus {\n type: string\n text: string\n}\n\nexport interface Context {\n source: Source\n onAddNode: OnAddNode\n onChangeArg: OnChangeArg\n onChangeScript: OnChangeScript\n onDeleteFuncNode: OnDeleteFuncNode\n onGenerateScript: OnGenerateScript\n onToggleYield: OnToggleYield\n data: FluxTable[]\n scriptUpToYield: ScriptUpToYield\n}\n\nexport interface DeleteFuncNodeArgs {\n funcID: string\n bodyID: string\n declarationID?: string\n yieldNodeID?: string\n}\n\nexport interface InputArg {\n funcID: string\n bodyID: string\n declarationID?: string\n key: string\n value: string | boolean | {[x: string]: string}\n generate?: boolean\n}\n\n// Flattened AST\nexport interface BinaryExpressionNode {\n source: string\n type: string\n}\n\ninterface ObjectNode {\n name: string\n type: string\n}\n\ninterface PropertyNode {\n name?: string\n value?: string\n type: string\n}\n\nexport interface MemberExpressionNode {\n type: string\n source: string\n object: ObjectNode\n property: PropertyNode\n}\n\nexport type FilterNode = BinaryExpressionNode | MemberExpressionNode\n\nexport interface FilterTagCondition {\n key: string\n operator: string\n value: string\n}\n\nexport interface FilterClause {\n [tagKey: string]: FilterTagCondition[]\n}\n\nexport type SetFilterTagValue = (\n key: string,\n value: string,\n selected: boolean\n) => void\n\nexport type SetEquality = (tagKey: string, equal: boolean) => void\n\nexport interface FlatBody {\n type: string\n source: string\n funcs?: Func[]\n declarations?: FlatDeclaration[]\n}\nexport interface Body extends FlatBody {\n id: string\n}\n\nexport interface Func {\n type: string\n name: string\n args: Arg[]\n source: string\n id: string\n}\n\nexport type Arg = ArgString\n\nexport interface ArgString {\n key: string\n value: string\n type: string\n}\n\ninterface FlatExpression {\n id: string\n funcs?: Func[]\n}\n\ninterface FlatDeclaration extends FlatExpression {\n name: string\n value: string\n type: string\n}\n\n// Semantic Graph list of available functions for flux queries\nexport interface Suggestion {\n name: string\n params: {\n [key: string]: string\n }\n}\n\nexport interface FluxLinks {\n self: string\n suggestions: string\n ast: string\n}\n\nexport type GroupKey = {\n [columnName: string]: string\n}\n\n// FluxTable is the result of a request to Flux\n// https://github.com/influxdata/influxdb/blob/master/query/docs/SPEC.md#response-format\nexport interface FluxTable {\n id: string\n name: string\n data: string[][]\n result: string\n groupKey: GroupKey\n dataTypes: {\n [columnName: string]: string\n }\n}\n\nexport interface SchemaFilter {\n key: string\n value: string\n}\n\nexport enum RemoteDataState {\n NotStarted = 'NotStarted',\n Loading = 'Loading',\n Done = 'Done',\n Error = 'Error',\n}\n\nexport interface TagKeyValuePair {\n key: string\n value: string\n}\n","export {LatLonColumn, LatLonColumns} from 'src/client'\n","export {LogEvent} from 'src/client'\n","// Libraries\nimport React, {FC, createElement} from 'react'\n\nimport EmptyQueryView, {ErrorFormat} from 'src/shared/components/EmptyQueryView'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\nimport {SUPPORTED_VISUALIZATIONS} from 'src/visualization'\nimport {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\n\nimport ViewLoadingSpinner from 'src/visualization/components/internal/ViewLoadingSpinner'\nimport {FromFluxResult} from '@influxdata/giraffe'\nimport {\n AnnotationsList,\n RemoteDataState,\n TimeRange,\n ViewProperties,\n} from 'src/types'\n\ninterface Props {\n properties: ViewProperties\n annotations?: AnnotationsList\n cellID?: string\n error?: string\n hideTimer?: boolean\n isInitial?: boolean\n loading?: RemoteDataState\n result?: FromFluxResult\n timeRange?: TimeRange\n transmitWindowPeriod?: (windowPeriod: number | string) => void\n}\n\nconst InnerView: FC = ({\n properties,\n annotations,\n cellID,\n error,\n isInitial,\n loading,\n result,\n timeRange,\n transmitWindowPeriod,\n}) => {\n if (!SUPPORTED_VISUALIZATIONS[properties.type]?.component) {\n throw new Error('Unknown view type in ')\n }\n\n const fallbackNote =\n properties.type !== 'check' && properties['showNoteWhenEmpty']\n ? properties['note']\n : null\n const hasResults = !!(result?.table?.length || 0)\n\n return (\n \n {createElement(SUPPORTED_VISUALIZATIONS[properties.type].component, {\n annotations: annotations,\n cellID: cellID,\n properties: properties,\n result: result,\n timeRange: timeRange || DEFAULT_TIME_RANGE,\n transmitWindowPeriod: transmitWindowPeriod || (() => {}),\n })}\n \n )\n}\n\nconst View: FC = props => (\n \n {!props.hideTimer && (\n \n )}\n \n \n)\n\nexport default View\n","import React, {FC, createElement} from 'react'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\n\nimport {\n VisualizationOptionProps,\n SUPPORTED_VISUALIZATIONS,\n} from 'src/visualization'\n\nconst ViewOptions: FC = ({\n properties,\n results,\n update,\n}) => {\n if (!SUPPORTED_VISUALIZATIONS[properties.type].options) {\n return\n }\n\n return (\n \n
\n {createElement(SUPPORTED_VISUALIZATIONS[properties.type].options, {\n properties: properties,\n results,\n update: update,\n })}\n
\n
\n )\n}\n\nexport default ViewOptions\n","import React, {FC} from 'react'\nimport {SUPPORTED_VISUALIZATIONS} from 'src/visualization'\n\n// Components\nimport {Dropdown, DropdownMenuTheme} from '@influxdata/clockface'\nimport {ComponentStatus} from 'src/clockface'\n\n// Utils\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nexport interface Props {\n viewType: string\n onUpdateType: (type: string) => void\n filter?: string[]\n}\n\nconst ViewTypeDropdown: FC = ({viewType, onUpdateType, filter = []}) => {\n const items = Object.values(SUPPORTED_VISUALIZATIONS)\n .filter(def => !filter.includes(def.type))\n .filter(def => !def.disabled)\n .filter(def => !def.featureFlag || isFlagEnabled(def.featureFlag))\n .filter(def => def.options)\n .sort((a, b) => a.name.localeCompare(b.name))\n .map(def => (\n \n
{def.graphic}
\n
{def.name}
\n \n ))\n\n return (\n (\n \n
\n {SUPPORTED_VISUALIZATIONS[viewType]?.graphic}\n
\n
\n {SUPPORTED_VISUALIZATIONS[viewType]?.name}\n
\n \n )}\n menu={onCollapse => (\n \n {items}\n \n )}\n />\n )\n}\n\nexport default ViewTypeDropdown\n","import {\n buildSupportedVisualizations,\n Visualization,\n Visualizations,\n VisualizationProps,\n VisualizationOptionProps,\n} from 'src/visualization/contextLoader'\n\nexport {\n Visualization,\n Visualizations,\n VisualizationProps,\n VisualizationOptionProps,\n}\n\nexport const SUPPORTED_VISUALIZATIONS: Visualizations =\n buildSupportedVisualizations()\n\nexport {default as View} from 'src/visualization/components/View'\nexport {default as ViewOptions} from 'src/visualization/components/ViewOptions'\nexport {default as ViewTypeDropdown} from 'src/visualization/components/ViewTypeDropdown'\n","import {FunctionComponent, ComponentClass} from 'react'\nimport {AnnotationsList, ViewProperties, TimeRange} from 'src/types'\nimport {FluxResult} from 'src/types/flows'\nimport {SimpleTableViewProperties} from 'src/types'\n\nexport interface VisualizationOptionProps {\n properties: ViewProperties\n results: FluxResult['parsed']\n update: (obj: any) => void\n}\n\nexport interface VisualizationProps {\n properties: ViewProperties | SimpleTableViewProperties\n result: FluxResult['parsed']\n annotations?: AnnotationsList\n cellID?: string\n timeRange?: TimeRange\n transmitWindowPeriod?: (windowPeriod: number | string) => void\n}\n\nexport interface Visualization {\n type: string // a unique string that identifies a visualization\n name: string // the name that shows up in the dropdown\n graphic: JSX.Element // the icon that shows up in the dropdown\n component?:\n | FunctionComponent\n | ComponentClass // the view component for rendering the interface\n disabled?: boolean // if you should show it or not, takes precidence over feature flagging\n featureFlag?: string // designates a flag that should enable the panel type\n initial: ViewProperties // the default state\n options?: FunctionComponent // the view component for rendering the interface\n}\n\nexport interface Visualizations {\n [visualizationType: string]: Visualization\n}\n\nexport const buildSupportedVisualizations = (): Visualizations => {\n const supportedVisualizations: Visualizations = {}\n const visualizationDefintionContext = require.context(\n './types',\n true,\n /index\\.(ts|tsx)$/\n )\n\n visualizationDefintionContext\n .keys()\n .forEach(visualizationDefinitionIndexFile => {\n const visualizationDefinitionModule = visualizationDefintionContext(\n visualizationDefinitionIndexFile\n )\n visualizationDefinitionModule.default((visualization: Visualization) => {\n supportedVisualizations[visualization.type] = visualization\n })\n })\n\n return supportedVisualizations\n}\n","export {MeState} from 'src/me/reducers'\nexport {AccountType, Me} from 'src/client/unityRoutes'\n","import {Action} from 'src/shared/actions/notifications'\nimport {IconFont} from '@influxdata/clockface'\n\nexport type NotificationAction = Action\n\nexport type NotificationDismiss = () => void\n\nexport type NotificationButtonElement = (\n onDismiss?: NotificationDismiss\n) => JSX.Element\n\nexport interface Notification {\n id?: string\n styles?: object\n style: NotificationStyle\n icon: IconFont\n duration?: number\n message: string\n buttonElement?: NotificationButtonElement\n // We probably do not need type here\n // It is not being read anywhere, seems like metadata?\n type?: string\n aggregateType?: boolean\n}\n\nexport enum NotificationStyle {\n Error = 'error',\n Success = 'success',\n Info = 'info',\n Primary = 'primary',\n Warning = 'warning',\n Secondary = 'secondary',\n}\n","export {\n OperatorAccount,\n OperatorAccounts,\n OperatorOrgLimits,\n OperatorOrganization as OperatorOrg,\n OperatorOrganizations as OperatorOrgs,\n OperatorProviders,\n OperatorRegions,\n OrgLimits,\n OperatorUser,\n} from 'src/client/unityRoutes'\n\nexport interface CellInfo {\n path: string\n name: string\n header?: string\n defaultValue: string | number\n renderValue?: (any) => any\n}\n\nexport interface ResourceInfo {\n path: string[]\n name: string\n header: string\n defaultValue: string | number\n renderValue?: (any) => any\n}\n","export {Organization} from 'src/client'\n","export {Query, Dialect} from 'src/client'\n\ntype Nullable = T | null\n\nexport type SelectableTimeRangeLower =\n | 'now() - 1m'\n | 'now() - 5m'\n | 'now() - 15m'\n | 'now() - 1h'\n | 'now() - 3h'\n | 'now() - 6h'\n | 'now() - 12h'\n | 'now() - 24h'\n | 'now() - 2d'\n | 'now() - 7d'\n | 'now() - 30d'\n\nexport type TimeRange =\n | SelectableDurationTimeRange\n | DurationTimeRange\n | CustomTimeRange\n\nexport enum TimeRangeDirection {\n Upper = 'upper',\n Lower = 'lower',\n}\nexport interface SelectableDurationTimeRange {\n lower: SelectableTimeRangeLower\n upper: Nullable\n seconds: number\n format?: string\n label: string\n duration: string\n type: 'selectable-duration'\n windowPeriod: number\n}\n\nexport interface DurationTimeRange {\n lower: string\n upper: Nullable\n type: 'duration'\n}\n\nexport interface CustomTimeRange {\n lower: string\n upper: string\n type: 'custom'\n}\n","import {Service} from './'\n\nexport type NewSource = Pick>\n\nexport enum SourceAuthenticationMethod {\n LDAP = 'ldap',\n Basic = 'basic',\n Shared = 'shared',\n Unknown = 'unknown',\n}\n\nexport interface Source {\n id: string\n name: string\n type: string\n username?: string\n password?: string\n sharedSecret?: string\n url: string\n metaUrl?: string\n insecureSkipVerify: boolean\n default: boolean\n telegraf: string\n links: SourceLinks\n defaultRP?: string\n text?: string // added client-side for dropdowns\n services?: Service[]\n authentication?: SourceAuthenticationMethod\n}\n\nexport interface SourceLinks {\n query: string\n self: string\n kapacitors: string\n proxy: string\n queries: string\n write: string\n permissions: string\n users: string\n roles?: string\n databases: string\n annotations: string\n health: string\n services: string\n}\n\nexport interface SourceOption extends Source {\n text: string\n}\n","import {Task as ITask} from 'src/client'\nimport {NormalizedState, Run, RemoteDataState, LogEvent} from 'src/types'\n\nexport interface Task extends Omit {\n labels?: string[]\n scriptID?: string\n scriptParams?: string\n}\nexport interface TaskOptions {\n name: string\n interval: string\n cron: string\n offset: string\n taskScheduleType: TaskSchedule\n orgID: string\n toOrgName: string\n toBucketName: string\n}\n\nexport interface TasksState extends NormalizedState {\n newScript: string\n currentScript: string\n currentTask: Task\n searchTerm: string\n showInactive: boolean\n taskOptions: TaskOptions\n runs: Run[]\n runStatus: RemoteDataState\n logs: LogEvent[]\n currentPage: string\n}\n\nexport enum TaskSchedule {\n interval = 'interval',\n cron = 'cron',\n unselected = '',\n}\n\nexport type TaskOptionKeys = keyof TaskOptions\n","import {\n Cell,\n Dashboard,\n Document,\n DocumentCreate,\n DocumentListEntry,\n DocumentMeta,\n NormalizedState,\n RemoteDataState,\n Variable,\n View,\n GenLabel,\n PostVariable,\n Label,\n} from 'src/types'\n\nimport {Stack} from 'src/client'\n\nexport enum TemplateType {\n Label = 'label',\n Task = 'task',\n Dashboard = 'dashboard',\n View = 'view',\n Cell = 'cell',\n Variable = 'variable',\n}\n\nexport interface InstalledStack extends Stack {\n eventType: string\n name: string\n resources: any[]\n sources: string[]\n}\n\nexport interface TemplateSummary extends Omit {\n labels: string[]\n status: RemoteDataState\n}\n\nexport type CommunityTemplate = any\n\nexport interface EnvReference {\n resourceField: string\n envRefKey: string\n value?: string | number | boolean\n defaultValue?: string | number | boolean\n valueType: string\n}\n\nexport interface TemplatesState extends NormalizedState {\n exportTemplate: {status: RemoteDataState; item: DocumentCreate}\n stagedCommunityTemplate: CommunityTemplate\n stagedTemplateEnvReferences: {[key: string]: EnvReference}\n communityTemplateReadmeCollection: {[key: string]: string}\n stagedTemplateUrl: string\n stacks: InstalledStack[]\n}\n\ninterface KeyValuePairs {\n [key: string]: any\n}\n\ninterface DocumentMetaWithTemplateID extends DocumentMeta {\n templateID?: string\n}\n\n// Templates\nexport interface GenTemplateBase extends Document {\n meta: DocumentMetaWithTemplateID\n content: {data: TemplateData; included: TemplateIncluded[]}\n labels: Label[]\n}\n\nexport interface TemplateBase extends Omit {\n meta: DocumentMetaWithTemplateID\n content: {data: TemplateData; included: TemplateIncluded[]}\n labels: string[]\n}\n\n// TODO: be more specific about what attributes can be\ninterface TemplateData {\n type: TemplateType\n attributes: KeyValuePairs\n relationships: Relationships\n}\n\ninterface TemplateIncluded {\n type: TemplateType\n id: string\n attributes: KeyValuePairs\n relationships?: Relationships\n}\n\n// enforces key association with relationship type\nexport type Relationships = {\n [key in keyof RelationshipMap]?: {\n data: OneOrMany\n }\n}\n\ntype OneOrMany = T | T[]\n\ninterface RelationshipMap {\n cell: CellRelationship\n label: LabelRelationship\n view: ViewRelationship\n variable: VariableRelationship\n}\n\nexport interface CellRelationship {\n type: TemplateType.Cell\n id: string\n}\n\nexport interface LabelRelationship {\n type: TemplateType.Label\n id: string\n}\n\nexport interface VariableRelationship {\n type: TemplateType.Variable\n id: string\n}\n\ninterface ViewRelationship {\n type: TemplateType.View\n id: string\n}\n\n// Template Includeds\nexport interface ViewIncluded extends TemplateIncluded {\n type: TemplateType.View\n attributes: View\n}\n\nexport interface CellIncluded extends TemplateIncluded {\n type: TemplateType.Cell\n attributes: Cell\n relationships: {\n view: {data: ViewRelationship}\n }\n}\n\nexport interface LabelIncluded extends TemplateIncluded {\n type: TemplateType.Label\n attributes: GenLabel\n}\n\nexport interface VariableIncluded extends TemplateIncluded {\n type: TemplateType.Variable\n attributes: Variable\n relationships: {\n [TemplateType.Label]: {data: LabelRelationship[]}\n }\n}\n\nexport type TaskTemplateIncluded = LabelIncluded\n\nexport type DashboardTemplateIncluded =\n | CellIncluded\n | ViewIncluded\n | LabelIncluded\n | VariableIncluded\n\nexport type VariableTemplateIncluded = LabelIncluded | VariableIncluded\n\n// Template Data\ninterface TaskTemplateData extends TemplateData {\n type: TemplateType.Task\n attributes: {name: string; flux: string}\n relationships: {\n [TemplateType.Label]: {data: LabelRelationship[]}\n }\n}\n\ninterface DashboardTemplateData extends TemplateData {\n type: TemplateType.Dashboard\n attributes: Dashboard\n relationships: {\n [TemplateType.Label]: {data: LabelRelationship[]}\n [TemplateType.Cell]: {data: CellRelationship[]}\n [TemplateType.Variable]: {data: VariableRelationship[]}\n }\n}\n\ninterface VariableTemplateData extends TemplateData {\n type: TemplateType.Variable\n attributes: PostVariable\n relationships: {\n [TemplateType.Label]: {data: LabelRelationship[]}\n [TemplateType.Variable]: {data: VariableRelationship[]}\n }\n}\n\n// Templates\nexport interface TaskTemplate extends TemplateBase {\n content: {\n data: TaskTemplateData\n included: TaskTemplateIncluded[]\n }\n}\n\nexport interface DashboardTemplate extends TemplateBase {\n content: {\n data: DashboardTemplateData\n included: DashboardTemplateIncluded[]\n }\n}\n\nexport interface VariableTemplate extends TemplateBase {\n content: {\n data: VariableTemplateData\n included: VariableTemplateIncluded[]\n }\n}\n\nexport type Template = TaskTemplate | DashboardTemplate | VariableTemplate\n","import {Invite as GenInvite} from 'src/client/unityRoutes'\nexport {OrgUser as CloudUser, Invite} from 'src/client/unityRoutes'\n\nexport type Role = 'owner' | 'member'\n\nexport type DraftInvite = Omit\n","export type Action = ReturnType\n\nexport const SET_CURRENT_DASHBOARD = 'SET_CURRENT_DASHBOARD'\n\nexport const setDashboard = (id?: string) =>\n ({\n type: SET_CURRENT_DASHBOARD,\n id,\n } as const)\n","import {CustomTimeRange, TimeRange, DurationTimeRange} from 'src/types/queries'\n\nimport {SELECTABLE_TIME_RANGES} from 'src/shared/constants/timeRanges'\nimport {isDurationWithNowParseable} from 'src/shared/utils/duration'\n\ninterface InputTimeRange {\n seconds?: number\n lower?: string\n upper?: string\n}\n\ninterface OutputTimeRange {\n since: number\n until: number | null\n}\n\nexport const millisecondTimeRange = ({\n seconds,\n lower,\n upper,\n}: InputTimeRange): OutputTimeRange => {\n // Is this a relative time range?\n if (seconds) {\n return {since: Date.now() - seconds * 1000, until: null}\n }\n\n const since = Date.parse(lower)\n let until\n if (upper === 'now()') {\n until = Date.now()\n } else {\n until = Date.parse(upper)\n }\n return {since, until}\n}\n\nfunction isDate(date: string): boolean {\n const parsed = Date.parse(date)\n\n if (isNaN(parsed)) {\n return false\n }\n\n return true\n}\n\nexport const validateAndTypeRange = (timeRange: {\n lower: string\n upper: string\n}): TimeRange => {\n const {lower, upper} = timeRange\n if (isDate(lower) && isDate(upper)) {\n return {\n ...timeRange,\n type: 'custom',\n } as CustomTimeRange\n }\n\n if (isDurationWithNowParseable(lower)) {\n const selectableTimeRange = SELECTABLE_TIME_RANGES.find(\n r => r.lower === lower\n )\n\n if (selectableTimeRange) {\n return selectableTimeRange\n }\n\n return {\n lower,\n upper: null,\n type: 'duration',\n } as DurationTimeRange\n }\n return null\n}\n","import {CurrentIdentity, CurrentOrg} from 'src/identity/apis/auth'\nimport {BillingProvider, RemoteDataState} from 'src/types'\n\nexport const SET_QUARTZ_IDENTITY = 'SET_QUARTZ_IDENTITY'\nexport const SET_QUARTZ_IDENTITY_STATUS = 'SET_QUARTZ_IDENTITY_STATUS'\nexport const SET_CURRENT_BILLING_PROVIDER = 'SET_CURRENT_BILLING_PROVIDER'\nexport const SET_CURRENT_ORG_DETAILS = 'SET_CURRENT_ORG_DETAILS'\n\nexport type Actions =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const setQuartzIdentity = (identity: CurrentIdentity) =>\n ({\n type: SET_QUARTZ_IDENTITY,\n identity: identity,\n } as const)\n\nexport const setCurrentBillingProvider = (billingProvider: BillingProvider) =>\n ({\n type: SET_CURRENT_BILLING_PROVIDER,\n billingProvider: billingProvider,\n } as const)\n\nexport const setCurrentOrgDetails = (orgDetails: CurrentOrg) =>\n ({\n type: SET_CURRENT_ORG_DETAILS,\n org: orgDetails,\n } as const)\n\nexport const setQuartzIdentityStatus = (status: RemoteDataState) =>\n ({\n type: SET_QUARTZ_IDENTITY_STATUS,\n status,\n } as const)\n","export type CurrentPage = 'dashboard' | 'not set'\n\nexport type Action = ReturnType\n\nexport const setCurrentPage = (currentPage: CurrentPage) =>\n ({type: 'SET_CURRENT_PAGE', currentPage} as const)\n\n// This only exists until we have app-wide color themes.\nconst currentPage = (state: CurrentPage = 'not set', action: Action) => {\n switch (action.type) {\n case 'SET_CURRENT_PAGE': {\n return action.currentPage\n }\n\n default:\n return state\n }\n}\n\nexport default currentPage\n","// Libraries\nimport {get} from 'lodash'\nimport {produce} from 'immer'\n\n// Utils\nimport {createView, defaultViewQuery} from 'src/views/helpers'\nimport {isConfigValid, buildQuery} from 'src/timeMachine/utils/queryBuilder'\n\n// Constants\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {\n THRESHOLD_TYPE_TEXT,\n THRESHOLD_TYPE_BG,\n} from 'src/shared/constants/thresholds'\nimport {pastHourTimeRange} from 'src/shared/constants/timeRanges'\nimport {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {\n AGG_WINDOW_AUTO,\n DEFAULT_FILLVALUES,\n} from 'src/timeMachine/constants/queryBuilder'\n\n// Types\nimport {\n AutoRefresh,\n StatusRow,\n TableViewProperties,\n TimeRange,\n View,\n ViewType,\n QueryView,\n QueryViewProperties,\n ExtractWorkingView,\n DashboardDraftQuery,\n BuilderConfig,\n BuilderConfigAggregateWindow,\n RemoteDataState,\n TimeMachineID,\n Color,\n} from 'src/types'\nimport {Action as TimeMachineAction} from 'src/timeMachine/actions'\n\nimport {TimeMachineTab} from 'src/types/timeMachine'\nimport {BuilderAggregateFunctionType} from 'src/client/generatedRoutes'\n\ninterface QueryBuilderState {\n buckets: string[]\n bucketsStatus: RemoteDataState\n functions: Array<[{name: string}]>\n aggregateWindow: BuilderConfigAggregateWindow\n tags: Array<{\n aggregateFunctionType: BuilderAggregateFunctionType\n valuesSearchTerm: string\n keysSearchTerm: string\n keys: string[]\n keysStatus: RemoteDataState\n values: string[]\n valuesStatus: RemoteDataState\n }>\n}\n\ninterface QueryResultsState {\n files: string[] | null\n status: RemoteDataState\n isInitialFetch: boolean\n fetchDuration: number\n errorMessage: string\n statuses: StatusRow[][]\n}\n\nexport interface TimeMachineState {\n view: QueryView\n timeRange: TimeRange\n autoRefresh: AutoRefresh\n draftQueries: DashboardDraftQuery[]\n isViewingRawData: boolean\n isViewingVisOptions: boolean\n activeTab: TimeMachineTab\n activeQueryIndex: number | null\n queryBuilder: QueryBuilderState\n queryResults: QueryResultsState\n contextID?: string | null\n}\n\nexport interface TimeMachinesState {\n activeTimeMachineID: TimeMachineID\n timeMachines: {\n ['de']: TimeMachineState\n ['veo']: TimeMachineState\n ['alerting']: TimeMachineState\n }\n}\n\nexport const initialStateHelper = (): TimeMachineState => {\n return {\n timeRange: pastHourTimeRange,\n autoRefresh: AUTOREFRESH_DEFAULT,\n view: createView(),\n draftQueries: [{...defaultViewQuery(), hidden: false}],\n isViewingRawData: false,\n isViewingVisOptions: false,\n activeTab: 'queries',\n activeQueryIndex: 0,\n queryResults: initialQueryResultsState(),\n queryBuilder: {\n buckets: [],\n bucketsStatus: RemoteDataState.NotStarted,\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n functions: [[{name: 'mean'}]],\n tags: [\n {\n aggregateFunctionType: 'filter',\n keys: [],\n keysSearchTerm: '',\n keysStatus: RemoteDataState.NotStarted,\n values: [],\n valuesSearchTerm: '',\n valuesStatus: RemoteDataState.NotStarted,\n },\n ],\n },\n }\n}\n\nexport const initialState = (): TimeMachinesState => ({\n activeTimeMachineID: 'de',\n timeMachines: {\n veo: initialStateHelper(),\n de: initialStateHelper(),\n alerting: initialStateHelper(),\n },\n})\n\nconst getTableProperties = (view, files) => {\n if (!files || !files[0]) {\n return {...view.properties, fieldOptions: []}\n }\n const csv = files[0]\n let pointer = 0,\n ni\n\n // cut off the first 3 lines\n for (ni = 0; ni < 3; ni++) {\n pointer = csv.indexOf('\\r\\n', pointer) + 2\n }\n\n const existing = (view.properties.fieldOptions || []).reduce((prev, curr) => {\n prev[curr.internalName] = curr\n return prev\n }, {})\n\n csv\n .slice(pointer, csv.indexOf('\\r\\n', pointer))\n .split(',')\n .filter(o => !existing.hasOwnProperty(o))\n .filter(o => !['result', '', 'table', 'time'].includes(o))\n .forEach(o => {\n existing[o] = {\n internalName: o,\n displayName: o,\n visible: true,\n }\n })\n\n const fieldOptions = Object.keys(existing).map(e => existing[e])\n const properties = {...view.properties, fieldOptions}\n\n return properties\n}\n\nexport type Action = TimeMachineAction\n\nexport const timeMachinesReducer = (\n state: TimeMachinesState = initialState(),\n action: Action\n): TimeMachinesState => {\n if (action.type === 'SET_ACTIVE_TIME_MACHINE') {\n const {activeTimeMachineID, initialState} = action.payload\n const activeTimeMachine = state.timeMachines[activeTimeMachineID]\n const view = initialState.view || activeTimeMachine.view\n\n const draftQueries = JSON.parse(\n JSON.stringify(view.properties.queries)\n ).map(q => ({\n ...q,\n hidden: false,\n }))\n\n const queryBuilder = initialQueryBuilderState(draftQueries[0].builderConfig)\n\n const queryResults = initialQueryResultsState()\n const timeRange =\n activeTimeMachineID === 'alerting'\n ? DEFAULT_TIME_RANGE\n : activeTimeMachine.timeRange\n\n return {\n ...state,\n activeTimeMachineID,\n timeMachines: {\n ...state.timeMachines,\n [activeTimeMachineID]: {\n ...activeTimeMachine,\n activeTab: 'queries',\n timeRange,\n ...initialState,\n isViewingRawData: false,\n activeQueryIndex: 0,\n draftQueries,\n queryBuilder,\n queryResults,\n },\n },\n }\n }\n\n // All other actions act upon whichever single `TimeMachineState` is\n // specified by the `activeTimeMachineID` property\n\n const {activeTimeMachineID, timeMachines} = state\n const activeTimeMachine = timeMachines[activeTimeMachineID]\n\n if (!activeTimeMachine) {\n return state\n }\n\n const newActiveTimeMachine = timeMachineReducer(activeTimeMachine, action)\n\n const s = {\n ...state,\n timeMachines: {\n ...timeMachines,\n [activeTimeMachineID]: newActiveTimeMachine,\n },\n }\n\n return s\n}\n\nexport const timeMachineReducer = (\n state: TimeMachineState,\n action: Action\n): TimeMachineState => {\n switch (action.type) {\n case 'SET_TIME_MACHINE_TIME_RANGE': {\n return produce(state, draftState => {\n draftState.timeRange = action.timeRange\n })\n }\n\n case 'SET_VIEW_NAME': {\n const {name} = action.payload\n const view = {...state.view, name}\n\n return {...state, view}\n }\n\n case 'SET_AUTO_REFRESH': {\n return produce(state, draftState => {\n draftState.autoRefresh = action.payload.autoRefresh\n\n buildAllQueries(draftState)\n })\n }\n\n case 'SET_VIEW_TYPE': {\n const {type} = action.payload\n const view = convertView(state.view, state.queryResults.files, type)\n\n return {...state, view}\n }\n\n case 'SET_ACTIVE_QUERY_TEXT': {\n const {text} = action.payload\n const draftQueries = [...state.draftQueries]\n draftQueries[state.activeQueryIndex] = {\n ...draftQueries[state.activeQueryIndex],\n text,\n }\n\n return {...state, draftQueries}\n }\n\n case 'SET_QUERY_RESULTS': {\n return produce(state, draftState => {\n const {status, files, fetchDuration, errorMessage, statuses} =\n action.payload\n\n draftState.queryResults.status = status\n draftState.queryResults.errorMessage = errorMessage\n\n if (files && files.length) {\n if (\n state.view &&\n state.view.properties &&\n state.view.properties.type === 'table'\n ) {\n const properties = getTableProperties(state.view, files)\n draftState.view = {...state.view, properties}\n }\n draftState.queryResults.files = files\n draftState.queryResults.isInitialFetch = false\n }\n if (statuses) {\n draftState.queryResults.statuses = statuses\n }\n\n if (typeof fetchDuration === 'number') {\n draftState.queryResults.fetchDuration = fetchDuration\n }\n })\n }\n\n case 'SET_IS_VIEWING_RAW_DATA': {\n const {isViewingRawData} = action.payload\n\n return {...state, isViewingRawData}\n }\n\n case 'SET_ACTIVE_TAB': {\n const {activeTab} = action.payload\n\n return {...state, activeTab}\n }\n\n case 'TOGGLE_VIS_OPTIONS': {\n return {...state, isViewingVisOptions: !state.isViewingVisOptions}\n }\n\n case 'SET_VIEW_PROPERTIES': {\n const {properties} = action.payload\n\n return setViewProperties(state, properties)\n }\n\n case 'SET_GEOM': {\n const {geom} = action.payload\n\n return setViewProperties(state, {geom})\n }\n\n case 'SET_Y_AXIS_BOUNDS': {\n const {bounds} = action.payload\n\n return setYAxis(state, {bounds})\n }\n\n case 'SET_AXIS_PREFIX': {\n const {prefix, axis} = action.payload\n const viewType = state.view.properties.type\n\n if (viewType === 'heatmap' || viewType == 'scatter') {\n if (axis === 'x') {\n return setViewProperties(state, {xPrefix: prefix})\n }\n return setViewProperties(state, {yPrefix: prefix})\n }\n return setYAxis(state, {prefix})\n }\n\n case 'SET_AXIS_SUFFIX': {\n const {suffix, axis} = action.payload\n const viewType = state.view.properties.type\n\n if (viewType === 'heatmap' || viewType === 'scatter') {\n if (axis === 'x') {\n return setViewProperties(state, {xSuffix: suffix})\n }\n return setViewProperties(state, {ySuffix: suffix})\n }\n return setYAxis(state, {suffix})\n }\n\n case 'SET_Y_AXIS_BASE': {\n const {base} = action.payload\n\n return setYAxis(state, {base})\n }\n\n case 'SET_X_COLUMN': {\n const {xColumn} = action.payload\n return setViewProperties(state, {xColumn})\n }\n\n case 'SET_Y_COLUMN': {\n const {yColumn} = action.payload\n return setViewProperties(state, {yColumn})\n }\n\n case 'SET_Y_SERIES_COLUMNS': {\n const {ySeriesColumns} = action.payload\n return setViewProperties(state, {ySeriesColumns})\n }\n\n case 'SET_Y_LABEL_COLUMNS': {\n const {yLabelColumns} = action.payload\n return setViewProperties(state, {yLabelColumns})\n }\n\n case 'SET_Y_LABEL_COLUMN_SEPARATOR': {\n const {yLabelColumnSeparator} = action.payload\n return setViewProperties(state, {yLabelColumnSeparator})\n }\n\n case 'SET_X_AXIS_LABEL': {\n const {xAxisLabel} = action.payload\n\n switch (state.view.properties.type) {\n case 'histogram':\n case 'heatmap':\n case 'scatter':\n case 'mosaic':\n return setViewProperties(state, {xAxisLabel})\n default:\n return setYAxis(state, {label: xAxisLabel})\n }\n }\n\n case 'SET_Y_AXIS_LABEL': {\n const {yAxisLabel} = action.payload\n\n switch (state.view.properties.type) {\n case 'histogram':\n case 'heatmap':\n case 'scatter':\n case 'mosaic':\n return setViewProperties(state, {yAxisLabel})\n default:\n return setYAxis(state, {label: yAxisLabel})\n }\n }\n\n case 'SET_FILL_COLUMNS': {\n const {fillColumns} = action.payload\n\n return setViewProperties(state, {fillColumns})\n }\n\n case 'SET_SYMBOL_COLUMNS': {\n const {symbolColumns} = action.payload\n\n return setViewProperties(state, {symbolColumns})\n }\n\n case 'SET_HISTOGRAM_POSITION': {\n const {position} = action.payload\n\n return setViewProperties(state, {position})\n }\n\n case 'SET_LINE_POSITION': {\n const {position} = action.payload\n\n return setViewProperties(state, {position})\n }\n\n case 'SET_UPPER_COLUMN': {\n const {upperColumn} = action.payload\n\n return setViewProperties(state, {upperColumn})\n }\n\n case 'SET_MAIN_COLUMN': {\n const {mainColumn} = action.payload\n\n return setViewProperties(state, {mainColumn})\n }\n\n case 'SET_LOWER_COLUMN': {\n const {lowerColumn} = action.payload\n\n return setViewProperties(state, {lowerColumn})\n }\n\n case 'SET_LEGEND_OPACITY': {\n const {legendOpacity} = action.payload\n\n return setViewProperties(state, {legendOpacity})\n }\n\n case 'SET_LEGEND_ORIENTATION_THRESHOLD': {\n const {legendOrientationThreshold} = action.payload\n\n return setViewProperties(state, {legendOrientationThreshold})\n }\n\n case 'SET_LEGEND_COLORIZE_ROWS': {\n const {legendColorizeRows} = action.payload\n\n return setViewProperties(state, {legendColorizeRows})\n }\n\n case 'SET_LEGEND_HIDE': {\n const {legendHide} = action.payload\n\n return setViewProperties(state, {legendHide})\n }\n\n case 'SET_STATIC_LEGEND': {\n const {staticLegend} = action.payload\n\n return setViewProperties(state, {staticLegend})\n }\n\n case 'SET_BIN_COUNT': {\n const {binCount} = action.payload\n\n return setViewProperties(state, {binCount})\n }\n\n case 'SET_BIN_SIZE': {\n const {binSize} = action.payload\n\n return setViewProperties(state, {binSize})\n }\n\n case 'SET_COLOR_HEXES': {\n const {colors} = action.payload\n\n return setViewProperties(state, {colors})\n }\n\n case 'SET_VIEW_X_DOMAIN': {\n const {xDomain} = action.payload\n\n return setViewProperties(state, {xDomain})\n }\n\n case 'SET_VIEW_Y_DOMAIN': {\n const {yDomain} = action.payload\n\n return setViewProperties(state, {yDomain})\n }\n\n case 'SET_GENERATE_X_AXIS_TICKS': {\n const {generateXAxisTicks} = action.payload\n\n return setViewProperties(state, {generateXAxisTicks})\n }\n\n case 'SET_GENERATE_Y_AXIS_TICKS': {\n const {generateYAxisTicks} = action.payload\n\n return setViewProperties(state, {generateYAxisTicks})\n }\n\n case 'SET_X_TOTAL_TICKS': {\n const {xTotalTicks} = action.payload\n\n return setViewProperties(state, {xTotalTicks})\n }\n\n case 'SET_X_TICK_START': {\n const {xTickStart} = action.payload\n\n return setViewProperties(state, {xTickStart})\n }\n\n case 'SET_X_TICK_STEP': {\n const {xTickStep} = action.payload\n\n return setViewProperties(state, {xTickStep})\n }\n\n case 'SET_Y_TOTAL_TICKS': {\n const {yTotalTicks} = action.payload\n\n return setViewProperties(state, {yTotalTicks})\n }\n\n case 'SET_Y_TICK_START': {\n const {yTickStart} = action.payload\n\n return setViewProperties(state, {yTickStart})\n }\n\n case 'SET_Y_TICK_STEP': {\n const {yTickStep} = action.payload\n\n return setViewProperties(state, {yTickStep})\n }\n\n case 'SET_PREFIX': {\n const {prefix} = action.payload\n\n switch (state.view.properties.type) {\n case 'gauge':\n case 'single-stat':\n case 'line-plus-single-stat':\n return setViewProperties(state, {prefix})\n case 'check':\n case 'xy':\n case 'band':\n return setYAxis(state, {prefix})\n default:\n return state\n }\n }\n\n case 'SET_TICK_PREFIX': {\n const {tickPrefix} = action.payload\n\n switch (state.view.properties.type) {\n case 'gauge':\n case 'single-stat':\n case 'line-plus-single-stat':\n return setViewProperties(state, {tickPrefix})\n case 'check':\n case 'xy':\n case 'band':\n return setYAxis(state, {tickPrefix})\n default:\n return state\n }\n }\n\n case 'SET_SUFFIX': {\n const {suffix} = action.payload\n\n switch (state.view.properties.type) {\n case 'gauge':\n case 'single-stat':\n case 'line-plus-single-stat':\n return setViewProperties(state, {suffix})\n case 'check':\n case 'xy':\n case 'band':\n return setYAxis(state, {suffix})\n default:\n return state\n }\n }\n\n case 'SET_TICK_SUFFIX': {\n const {tickSuffix} = action.payload\n\n switch (state.view.properties.type) {\n case 'gauge':\n case 'single-stat':\n case 'line-plus-single-stat':\n return setViewProperties(state, {tickSuffix})\n case 'check':\n case 'xy':\n case 'band':\n return setYAxis(state, {tickSuffix})\n default:\n return state\n }\n }\n\n case 'SET_COLORS': {\n const {colors} = action.payload\n\n switch (state.view.properties.type) {\n case 'gauge':\n case 'table':\n case 'single-stat':\n case 'scatter':\n case 'check':\n case 'xy':\n case 'band':\n case 'histogram':\n return setViewProperties(state, {colors})\n case 'line-plus-single-stat':\n return setViewProperties(state, {\n colors: updateCorrectColors(state, colors),\n })\n default:\n return state\n }\n }\n\n case 'SET_DECIMAL_PLACES': {\n const {decimalPlaces} = action.payload\n\n return setViewProperties(state, {decimalPlaces})\n }\n\n case 'SET_SHADE_BELOW': {\n const {shadeBelow} = action.payload\n\n return setViewProperties(state, {shadeBelow})\n }\n\n case 'SET_HOVER_DIMENSION': {\n const {hoverDimension} = action.payload\n\n return setViewProperties(state, {hoverDimension})\n }\n\n case 'SET_BACKGROUND_THRESHOLD_COLORING': {\n let viewColors = []\n if ('colors' in state.view.properties) {\n viewColors = state.view.properties.colors as Color[]\n }\n\n const colors = viewColors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type: THRESHOLD_TYPE_BG,\n }\n }\n\n return color\n })\n\n return setViewProperties(state, {colors})\n }\n\n case 'SET_TEXT_THRESHOLD_COLORING': {\n let viewColors = []\n if ('colors' in state.view.properties) {\n viewColors = state.view.properties.colors as Color[]\n }\n\n const colors = viewColors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type: THRESHOLD_TYPE_TEXT,\n }\n }\n return color\n })\n\n return setViewProperties(state, {colors})\n }\n\n case 'EDIT_ACTIVE_QUERY_WITH_BUILDER': {\n return produce(state, draftState => {\n const query = draftState.draftQueries[draftState.activeQueryIndex]\n\n query.editMode = 'builder'\n query.hidden = false\n\n buildAllQueries(draftState)\n })\n }\n\n case 'RESET_QUERY_AND_EDIT_WITH_BUILDER': {\n return produce(state, draftState => {\n draftState.draftQueries[draftState.activeQueryIndex] = {\n ...defaultViewQuery(),\n editMode: 'builder',\n hidden: false,\n }\n })\n }\n\n case 'EDIT_ACTIVE_QUERY_AS_FLUX': {\n const {activeQueryIndex} = state\n const draftQueries = [...state.draftQueries]\n\n draftQueries[activeQueryIndex] = {\n ...draftQueries[activeQueryIndex],\n editMode: 'advanced',\n }\n\n return {\n ...state,\n draftQueries,\n }\n }\n\n case 'SET_ACTIVE_QUERY_INDEX': {\n return produce(state, draftState => {\n const {activeQueryIndex} = action.payload\n\n if (activeQueryIndex < draftState.draftQueries.length) {\n draftState.activeQueryIndex = activeQueryIndex\n resetBuilderState(draftState)\n }\n })\n }\n\n case 'ADD_QUERY': {\n return produce(state, draftState => {\n draftState.draftQueries = [\n ...state.draftQueries,\n {...defaultViewQuery(), hidden: false},\n ]\n draftState.activeQueryIndex = draftState.draftQueries.length - 1\n\n resetBuilderState(draftState)\n })\n }\n\n case 'REMOVE_QUERY': {\n return produce(state, draftState => {\n const {queryIndex} = action.payload\n\n draftState.draftQueries.splice(queryIndex, 1)\n\n const queryLength = draftState.draftQueries.length\n\n let activeQueryIndex: number\n\n if (queryIndex < queryLength) {\n activeQueryIndex = queryIndex\n } else if (queryLength === queryIndex && queryLength > 0) {\n activeQueryIndex = queryLength - 1\n } else {\n activeQueryIndex = 0\n }\n\n draftState.activeQueryIndex = activeQueryIndex\n\n resetBuilderState(draftState)\n })\n }\n\n case 'TOGGLE_QUERY': {\n return produce(state, draftState => {\n const draftQuery = draftState.draftQueries[action.payload.queryIndex]\n\n draftQuery.hidden = !draftQuery.hidden\n })\n }\n\n case 'SET_BUILDER_AGGREGATE_FUNCTION_TYPE': {\n return produce(state, draftState => {\n const {index, builderAggregateFunctionType} = action.payload\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n\n buildActiveQuery(draftState)\n if (\n draftQuery &&\n draftQuery.builderConfig &&\n draftQuery.builderConfig.tags[index]\n ) {\n // When switching between filtering and grouping\n // we want to clear out any previously selected values\n draftQuery.builderConfig.tags[index].values = []\n\n // but for the group aggregate, want to set default values\n if (builderAggregateFunctionType === 'group') {\n const initValues = draftQuery.builderConfig.tags\n .map(t => t.key)\n .filter(x => !!x)\n\n draftQuery.builderConfig.tags[index].values = initValues\n draftState.queryBuilder.tags[index].values = initValues\n }\n\n draftQuery.builderConfig.tags[index].aggregateFunctionType =\n builderAggregateFunctionType\n\n buildActiveQuery(draftState)\n }\n })\n }\n\n case 'SET_BUILDER_BUCKET_SELECTION': {\n return produce(state, draftState => {\n const builderConfig =\n draftState.draftQueries[draftState.activeQueryIndex].builderConfig\n\n builderConfig.buckets = [action.payload.bucket]\n\n if (action.payload.resetSelections) {\n const defaultAggregateFunctionType =\n initialStateHelper().queryBuilder.tags[0].aggregateFunctionType\n\n builderConfig.tags = [\n {\n key: '',\n values: [],\n aggregateFunctionType: defaultAggregateFunctionType,\n },\n ]\n buildActiveQuery(draftState)\n }\n })\n }\n\n case 'SET_BUILDER_BUCKETS': {\n return produce(state, draftState => {\n draftState.queryBuilder.buckets = action.payload.buckets\n draftState.queryBuilder.bucketsStatus = RemoteDataState.Done\n })\n }\n\n case 'SET_BUILDER_BUCKETS_STATUS': {\n return produce(state, draftState => {\n draftState.queryBuilder.bucketsStatus = action.payload.bucketsStatus\n })\n }\n\n case 'SET_BUILDER_TAGS_STATUS': {\n return produce(state, draftState => {\n const {status} = action.payload\n const tags = draftState.queryBuilder.tags\n\n for (const tag of tags) {\n tag.keysStatus = status\n tag.valuesStatus = status\n }\n })\n }\n\n case 'SET_BUILDER_TAG_KEYS': {\n return produce(state, draftState => {\n const {index, keys} = action.payload\n if (draftState.queryBuilder.tags[index] !== undefined) {\n draftState.queryBuilder.tags[index].keys = keys\n draftState.queryBuilder.tags[index].keysStatus = RemoteDataState.Done\n }\n })\n }\n\n case 'SET_BUILDER_TAG_KEYS_STATUS': {\n return produce(state, draftState => {\n const {index, status} = action.payload\n const tags = draftState.queryBuilder.tags\n if (tags[index] !== undefined) {\n tags[index].keysStatus = status\n\n if (status === RemoteDataState.Loading) {\n tags[index].valuesStatus = RemoteDataState.NotStarted\n for (let i = index + 1; i < tags.length; i++) {\n tags[i].keysStatus = RemoteDataState.NotStarted\n }\n }\n }\n })\n }\n\n case 'SET_BUILDER_TAG_VALUES': {\n return produce(state, draftState => {\n const {index, values} = action.payload\n if (draftState.queryBuilder.tags[index] !== undefined) {\n draftState.queryBuilder.tags[index].values = values\n draftState.queryBuilder.tags[index].valuesStatus =\n RemoteDataState.Done\n }\n })\n }\n\n case 'SET_BUILDER_TAG_VALUES_STATUS': {\n return produce(state, draftState => {\n const {index, status} = action.payload\n if (draftState.queryBuilder.tags[index] !== undefined) {\n draftState.queryBuilder.tags[index].valuesStatus = status\n }\n })\n }\n\n case 'SET_BUILDER_TAG_KEY_SELECTION': {\n return produce(state, draftState => {\n const {index, key} = action.payload\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n const tag = draftQuery.builderConfig.tags[index]\n\n tag.key = key\n tag.values = []\n tag.aggregateFunctionType = 'filter'\n })\n }\n\n case 'SET_BUILDER_TAG_VALUES_SELECTION': {\n return produce(state, draftState => {\n const {index, values} = action.payload\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n\n draftQuery.builderConfig.tags[index].values = values\n buildActiveQuery(draftState)\n })\n }\n\n case 'SET_BUILDER_VALUES_SEARCH_TERM': {\n return produce(state, draftState => {\n const {index, searchTerm} = action.payload\n if (draftState.queryBuilder.tags[index] !== undefined) {\n draftState.queryBuilder.tags[index].valuesSearchTerm = searchTerm\n }\n })\n }\n\n case 'SET_BUILDER_KEYS_SEARCH_TERM': {\n return produce(state, draftState => {\n const {index, searchTerm} = action.payload\n if (draftState.queryBuilder.tags[index] !== undefined) {\n draftState.queryBuilder.tags[index].keysSearchTerm = searchTerm\n }\n })\n }\n\n case 'ADD_TAG_SELECTOR': {\n return produce(state, draftState => {\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n const [initialTags] = initialStateHelper().queryBuilder.tags\n\n draftQuery.builderConfig.tags.push({\n key: '',\n values: [],\n aggregateFunctionType: initialTags.aggregateFunctionType,\n })\n draftState.queryBuilder.tags.push(initialTags)\n })\n }\n\n case 'REMOVE_TAG_SELECTOR': {\n return produce(state, draftState => {\n const {index} = action.payload\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n\n let selectedValues = []\n if (draftQuery) {\n selectedValues = draftQuery.builderConfig.tags[index].values\n\n draftQuery.builderConfig.tags.splice(index, 1)\n draftState.queryBuilder.tags.splice(index, 1)\n }\n\n if (selectedValues.length) {\n buildActiveQuery(draftState)\n }\n })\n }\n\n case 'SELECT_BUILDER_FUNCTION': {\n return produce(state, draftState => {\n const {functions} = action.payload\n\n const functionsWithNames = functions.map(f => ({\n name: f,\n }))\n\n draftState.draftQueries[\n draftState.activeQueryIndex\n ].builderConfig.functions = functionsWithNames\n\n buildActiveQuery(draftState)\n })\n }\n\n case 'SET_AGGREGATE_WINDOW': {\n return produce(state, draftState => {\n const {activeQueryIndex, draftQueries} = draftState\n const {period} = action.payload\n\n draftQueries[activeQueryIndex].builderConfig.aggregateWindow.period =\n period\n buildActiveQuery(draftState)\n })\n }\n\n case 'SET_AGGREGATE_FILL_VALUES': {\n return produce(state, draftState => {\n const {activeQueryIndex, draftQueries} = draftState\n const {fillValues} = action.payload\n\n draftQueries[\n activeQueryIndex\n ].builderConfig.aggregateWindow.fillValues = fillValues\n buildActiveQuery(draftState)\n })\n }\n\n case 'UPDATE_ACTIVE_QUERY_NAME': {\n const {activeQueryIndex} = state\n const {queryName} = action.payload\n const draftQueries = [...state.draftQueries]\n\n draftQueries[activeQueryIndex] = {\n ...draftQueries[activeQueryIndex],\n name: queryName,\n }\n\n return {...state, draftQueries}\n }\n\n case 'SET_FIELD_OPTIONS': {\n const workingView = state.view\n const {fieldOptions} = action.payload\n const properties = {\n ...workingView.properties,\n fieldOptions,\n }\n const view = {...state.view, properties}\n return {...state, view}\n }\n\n case 'UPDATE_FIELD_OPTION': {\n const workingView = state.view as ExtractWorkingView\n const {option} = action.payload\n const field = option.internalName\n\n const properties = {...workingView.properties}\n properties.fieldOptions = properties.fieldOptions.slice(0)\n\n const names = workingView.properties.fieldOptions.map(o => o.internalName)\n const idx = names.indexOf(field)\n\n if (idx < 0) {\n return state\n }\n\n properties.fieldOptions[idx] = option\n\n const view = {...state.view, properties}\n return {...state, view}\n }\n\n case 'SET_TABLE_OPTIONS': {\n const workingView = state.view\n const {tableOptions} = action.payload\n const properties = {...workingView.properties, tableOptions}\n const view = {...state.view, properties}\n\n return {...state, view}\n }\n\n case 'SET_TIME_FORMAT': {\n const workingView = state.view\n\n const {timeFormat} = action.payload\n const properties = {...workingView.properties, timeFormat}\n const view = {...state.view, properties}\n\n return {...state, view}\n }\n\n case 'SAVE_DRAFT_QUERIES': {\n return produce(state, draftState => {\n draftState.view.properties.queries = draftState.draftQueries.filter(\n q => !q.hidden\n )\n })\n }\n }\n\n return state\n}\n\nexport const setViewProperties = (\n state: TimeMachineState,\n update: {[key: string]: any}\n): TimeMachineState => {\n const view: any = state.view\n const properties = view.properties\n\n return {\n ...state,\n view: {...view, properties: {...properties, ...update}},\n }\n}\n\nconst setYAxis = (state: TimeMachineState, update: {[key: string]: any}) => {\n const view: any = state.view\n const properties = view.properties\n const axes = get(properties, 'axes', {})\n const yAxis = get(axes, 'y', {})\n\n return {\n ...state,\n view: {\n ...view,\n properties: {\n ...properties,\n axes: {...axes, y: {...yAxis, ...update}},\n },\n },\n }\n}\n\nconst updateCorrectColors = (\n state: TimeMachineState,\n update: Color[]\n): Color[] => {\n const view: any = state.view\n const colors = view.properties.colors\n\n if (get(update, '0.type', '') === 'scale') {\n return [...colors.filter(c => c.type !== 'scale'), ...update]\n }\n return [...colors.filter(c => c.type === 'scale'), ...update]\n}\n\nconst convertView = (\n view: QueryView,\n files,\n outType: ViewType\n): View => {\n const newView: any = createView(outType)\n newView.properties.queries = JSON.parse(\n JSON.stringify(view.properties.queries)\n )\n if (outType === 'table' && files) {\n newView.properties = getTableProperties(newView, files)\n }\n newView.name = view.name\n newView.cellID = view.cellID\n newView.dashboardID = view.dashboardID\n newView.id = (view as any).id\n newView.links = (view as any).links\n\n return newView\n}\n\nconst initialQueryBuilderState = (\n builderConfig: BuilderConfig\n): QueryBuilderState => {\n const defaultFunctions = initialStateHelper().queryBuilder.functions\n const [defaultTag] = initialStateHelper().queryBuilder.tags\n return {\n buckets: builderConfig.buckets,\n bucketsStatus: RemoteDataState.NotStarted,\n functions: [...defaultFunctions],\n aggregateWindow: {period: AGG_WINDOW_AUTO, fillValues: DEFAULT_FILLVALUES},\n tags: builderConfig.tags.map(() => {\n return {...defaultTag}\n }),\n }\n}\n\nconst initialQueryResultsState = (): QueryResultsState => ({\n files: null,\n status: RemoteDataState.NotStarted,\n isInitialFetch: true,\n fetchDuration: null,\n errorMessage: null,\n statuses: null,\n})\n\nexport const buildActiveQuery = (draftState: TimeMachineState) => {\n const draftQuery = draftState.draftQueries[draftState.activeQueryIndex]\n\n if (isConfigValid(draftQuery.builderConfig)) {\n draftQuery.text = buildQuery(draftQuery.builderConfig)\n } else if (!draftQuery.text) {\n draftQuery.text = ''\n }\n}\n\nconst buildAllQueries = (draftState: TimeMachineState) => {\n draftState.draftQueries\n .filter(query => query.editMode === 'builder')\n .forEach(query => {\n if (isConfigValid(query.builderConfig)) {\n query.text = buildQuery(query.builderConfig)\n } else {\n query.text = ''\n }\n })\n}\n\nconst resetBuilderState = (draftState: TimeMachineState) => {\n const newBuilderConfig =\n draftState.draftQueries[draftState.activeQueryIndex].builderConfig\n\n draftState.queryBuilder = initialQueryBuilderState(newBuilderConfig)\n}\n","import {get} from 'lodash'\n\nexport function getDeep(\n obj: any,\n path: string | number,\n fallback: T\n): T {\n return get(obj, path, fallback)\n}\n","export const OPTION_NAME = 'v'\nexport const TIME_RANGE_START = 'timeRangeStart'\nexport const TIME_RANGE_STOP = 'timeRangeStop'\nexport const WINDOW_PERIOD = 'windowPeriod'\n\nconst START = '^'\nconst QUOTE = '\"'\nconst SPACE = '\\\\s'\nconst NEWLINE = '\\\\n'\nconst COMMENT = '\\\\/\\\\/'\nconst ADD = '\\\\+'\nconst SUB = '\\\\-'\nconst MUL = '\\\\*'\nconst DIV = '\\\\/'\nconst MOD = '\\\\%'\nconst EQ = '\\\\=\\\\='\nconst LT = '\\\\<'\nconst GT = '\\\\>'\nconst LTE = '\\\\<='\nconst GTE = '\\\\>\\\\='\nconst NEQ = '\\\\!\\\\='\nconst REGEXEQ = '\\\\=\\\\~'\nconst REGEXNEQ = '\\\\!\\\\~'\nconst ASSIGN = '\\\\='\nconst ARROW = '\\\\=\\\\>'\nconst LPAREN = '\\\\('\nconst RPAREN = '\\\\)'\nconst LBRACK = '\\\\['\nconst RBRACK = '\\\\]'\nconst LBRACE = '\\\\{'\nconst RBRACE = '\\\\}'\nconst COLON = '\\\\:'\nconst COMMA = '\\\\,'\nconst EOF = '$'\n\nconst FLUX_BOUNDARY = [\n START,\n QUOTE,\n SPACE,\n NEWLINE,\n COMMENT,\n // and, or, and not all require spaces\n ADD,\n SUB,\n MUL,\n DIV,\n MOD,\n EQ,\n LT,\n GT,\n LTE,\n GTE,\n NEQ,\n REGEXEQ,\n REGEXNEQ,\n ASSIGN,\n ARROW,\n LPAREN,\n RPAREN,\n LBRACK,\n RBRACK,\n LBRACE,\n RBRACE,\n COLON,\n COMMA,\n EOF,\n].join('|')\n\nexport const BOUNDARY_GROUP = `(${FLUX_BOUNDARY})`\n\nexport const variableItemTypes = [\n {\n type: 'map',\n label: 'Map',\n },\n {\n type: 'query',\n label: 'Query',\n },\n {\n type: 'constant',\n label: 'CSV',\n },\n]\n","// Types\nimport {RemoteDataState, SecretEntities} from 'src/types'\nimport {Action as NotifyAction} from 'src/shared/actions/notifications'\nimport {NormalizedSchema} from 'normalizr'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | NotifyAction\n\nexport const SET_SECRETS = 'SET_SECRETS'\nexport const SET_SECRET = 'SET_SECRET'\nexport const REMOVE_SECRET = 'REMOVE_SECRET'\n\ntype SecretsSchema = NormalizedSchema<\n SecretEntities,\n R\n>\n\nexport const setSecrets = (\n status: RemoteDataState,\n schema?: SecretsSchema\n) =>\n ({\n type: SET_SECRETS,\n status,\n schema,\n } as const)\n\nexport const setSecret = (\n id: string,\n status: RemoteDataState,\n schema?: SecretsSchema\n) =>\n ({\n type: SET_SECRET,\n id,\n status,\n schema,\n } as const)\n\nexport const removeSecret = (id: string) =>\n ({\n type: REMOVE_SECRET,\n id,\n } as const)\n","import {OrganizationSummaries} from 'src/client/unityRoutes'\nimport {RemoteDataState} from 'src/types'\n\nexport const SET_QUARTZ_ORGANIZATIONS = 'SET_QUARTZ_ORGANIZATIONS'\nexport const SET_QUARTZ_ORGANIZATIONS_STATUS = 'SET_QUARTZ_ORGANIZATIONS_STATUS'\nexport const SET_QUARTZ_DEFAULT_ORG = 'SET_QUARTZ_DEFAULT_ORG'\n\nexport type Actions =\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const setQuartzOrganizations = (\n quartzOrganizations: OrganizationSummaries\n) =>\n ({\n type: SET_QUARTZ_ORGANIZATIONS,\n quartzOrganizations: quartzOrganizations,\n } as const)\n\nexport const setQuartzOrganizationsStatus = (status: RemoteDataState) =>\n ({\n type: SET_QUARTZ_ORGANIZATIONS_STATUS,\n status: status,\n } as const)\n\nexport const setQuartzDefaultOrg = (newDefaultOrgId: string) =>\n ({\n type: SET_QUARTZ_DEFAULT_ORG,\n newDefaultOrgId: newDefaultOrgId,\n } as const)\n","import {createBrowserHistory} from 'history'\nimport {getBrowserBasepath} from 'src/utils/basepath'\n\nconst basepath = getBrowserBasepath()\n// Older method used for pre-IE 11 compatibility\nwindow.basepath = basepath\n\nexport const history = createBrowserHistory({basename: basepath})\n","// Libraries\nimport React from 'react'\n\n// Types\nimport {ErrorMessageComponent} from 'src/types'\n\nimport {SafeBlankLink} from 'src/utils/SafeBlankLink'\n\nconst DefaultErrorMessage: ErrorMessageComponent = () => {\n return (\n \n An InfluxDB error has occurred. Please report the issue \n \n here\n \n .\n

\n )\n}\n\nexport default DefaultErrorMessage\n","// Libraries\nimport {get} from 'lodash'\n\n// Utils\nimport {findNodes} from 'src/shared/utils/ast'\nimport {durationToMilliseconds} from 'src/shared/utils/duration'\n\n// Types\nimport {\n Node,\n Package,\n CallExpression,\n Property,\n Expression,\n Identifier,\n ObjectExpression,\n DateTimeLiteral,\n DurationLiteral,\n} from 'src/types'\n\nexport function getMinDurationFromAST(ast: Package): number {\n // We can't take the minimum of durations of each range individually, since\n // separate ranges are potentially combined via an inner `join` call. So the\n // approach is to:\n //\n // 1. Find every possible `[start, stop]` combination for all start and stop\n // times across every `range` call\n // 2. Map each combination to a duration via `stop - start`\n // 3. Filter out the non-positive durations\n // 4. Take the minimum duration\n //\n const times = allRangeTimes(ast)\n\n if (!times.length) {\n throw new Error('no time ranges found in query')\n }\n\n const starts = times.map(t => t[0])\n const stops = times.map(t => t[1])\n const cartesianProduct = starts.map(start => stops.map(stop => [start, stop]))\n\n const durations = []\n .concat(...cartesianProduct)\n .map(([start, stop]) => stop - start)\n .filter(d => d > 0)\n\n const result = Math.min(...durations)\n\n return result\n}\n\nfunction allRangeTimes(ast: any): Array<[number, number]> {\n return findNodes(ast, isRangeNode).map(node => rangeTimes(ast, node))\n}\n\n/*\n Given a `range` call in an AST, reports the `start` and `stop` arguments the\n the call as absolute instants in time. If the `start` or `stop` argument is a\n relative duration literal, it is interpreted as relative to the current\n instant (`Date.now()`).\n*/\nfunction rangeTimes(ast: any, rangeNode: CallExpression): [number, number] {\n const now = Date.now()\n const properties: Property[] = (rangeNode.arguments[0] as ObjectExpression)\n .properties\n\n // The `start` argument is required\n const startProperty = properties.find(\n p => (p.key as Identifier).name === 'start'\n )\n\n const start = propertyTime(ast, startProperty.value, now)\n\n // The `end` argument to a `range` call is optional, and defaults to now\n const endProperty = properties.find(\n p => (p.key as Identifier).name === 'stop'\n )\n\n const end = endProperty ? propertyTime(ast, endProperty.value, now) : now\n if (isNaN(start) || isNaN(end)) {\n throw new Error('failed to analyze query')\n }\n\n return [start, end]\n}\n\nexport function propertyTime(ast: any, value: Expression, now: number): number {\n switch (value.type) {\n case 'UnaryExpression':\n return (\n now - durationToMilliseconds((value.argument as DurationLiteral).values)\n )\n\n case 'DurationLiteral':\n return now + durationToMilliseconds(value.values)\n\n case 'StringLiteral':\n case 'DateTimeLiteral':\n return Date.parse(value.value)\n\n case 'Identifier':\n return propertyTime(ast, lookupVariable(ast, value.name), now)\n\n case 'BinaryExpression':\n const leftTime = Date.parse((value.left as DateTimeLiteral).value)\n const rightDuration = durationToMilliseconds(\n (value.right as DurationLiteral).values\n )\n\n switch (value.operator) {\n case '+':\n return leftTime + rightDuration\n case '-':\n return leftTime - rightDuration\n default:\n throw new Error(`unexpected operator ${value.operator}`)\n }\n\n case 'MemberExpression':\n const objName = get(value, 'object.name')\n const propertyName = get(value, 'property.name')\n const objExpr = lookupVariable(ast, objName) as ObjectExpression\n const property = objExpr.properties.find(\n p => get(p, 'key.name') === propertyName\n )\n\n return propertyTime(ast, property.value, now)\n\n case 'CallExpression':\n if (isNowCall(value)) {\n return now\n }\n if (isTimeCall(value)) {\n const property = get(value, 'arguments[0].properties[0]value', {})\n return propertyTime(ast, property, now)\n }\n\n throw new Error('unexpected CallExpression')\n\n default:\n throw new Error(`unexpected expression type ${value.type}`)\n }\n}\n\n/*\n Find the node in the `ast` that defines the value of the variable with the\n given `name`.\n*/\nfunction lookupVariable(ast: any, name: string): Expression {\n const isDeclarator = node => {\n return (\n get(node, 'type') === 'VariableAssignment' &&\n get(node, 'id.name') === name\n )\n }\n\n const declarator = findNodes(ast, isDeclarator)\n\n if (!declarator.length) {\n throw new Error(`unable to lookup variable \"${name}\"`)\n }\n\n if (declarator.length > 1) {\n throw new Error('cannot lookup variable with duplicate declarations')\n }\n\n const init = declarator[0].init\n\n return init\n}\n\nfunction isNowCall(node: CallExpression): boolean {\n return get(node, 'callee.name') === 'now'\n}\n\nfunction isTimeCall(node: CallExpression): boolean {\n return get(node, 'callee.name') === 'time'\n}\n\nfunction isRangeNode(node: Node) {\n return (\n get(node, 'callee.type') === 'Identifier' &&\n get(node, 'callee.name') === 'range'\n )\n}\n","// Libraries\nimport React, {Component, ChangeEvent} from 'react'\nimport {debounce} from 'lodash'\n\n// Components\nimport {ComponentSize, ComponentStatus, Input} from '@influxdata/clockface'\n\n// Types\nimport {IconFont} from '@influxdata/clockface'\n\n// Decorators\nimport {ErrorHandling} from 'src/shared/decorators/errors'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\n\ninterface Props {\n onSearch: (searchTerm: string) => void\n placeholderText: string\n searchTerm: string\n testID: string\n tabIndex?: number\n autoFocus?: boolean\n status?: ComponentStatus\n size?: ComponentSize\n}\n\ninterface State {\n searchTerm: string\n}\n\n@ErrorHandling\nclass SearchWidget extends Component {\n public static defaultProps = {\n widthPixels: 440,\n placeholderText: 'Search...',\n searchTerm: '',\n testID: 'search-widget',\n autoFocus: false,\n tabIndex: 0,\n size: ComponentSize.Small,\n }\n\n public componentDidUpdate(prevProps: Props) {\n if (this.props.searchTerm !== prevProps.searchTerm) {\n this.setState({searchTerm: this.props.searchTerm})\n }\n }\n\n constructor(props: Props) {\n super(props)\n this.state = {\n searchTerm: this.props.searchTerm,\n }\n }\n\n public UNSAFE_componentWillMount() {\n this.handleSearch = debounce(this.handleSearch, 50)\n }\n\n public render() {\n const {\n placeholderText,\n status = ComponentStatus.Default,\n testID,\n tabIndex = 0,\n autoFocus,\n size,\n } = this.props\n const {searchTerm} = this.state\n\n return (\n \n \n \n )\n }\n\n private handleSearch = (): void => {\n this.props.onSearch(this.state.searchTerm)\n }\n\n private handleBlur = (e: ChangeEvent): void => {\n this.setState({searchTerm: e.target.value}, this.handleSearch)\n }\n\n private handleChange = (e: ChangeEvent): void => {\n this.setState({searchTerm: e.target.value}, this.handleSearch)\n }\n private clear = (): void => {\n this.setState({searchTerm: ''}, this.handleSearch)\n }\n}\n\nexport default SearchWidget\n","/**\n * This files has been created as a way to effectively test\n * the getTimeRangeWithTimezone function since current system (circleCI, Jenkins)\n * and JS Date limitations prevent us from fully testing out its dependent functions\n *\n * It should be noted that the native getTimezoneOffset function returns a number\n * that represents the number of minutes (not hours) the \"local\" timezone is offset\n * where locations West of UTC are positive (+420) and locations East of UTC are negative (-120):\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset\n **/\n\nexport const getTimezoneOffset = (): number => new Date().getTimezoneOffset()\n","import {OPTION_NAME} from 'src/variables/constants/index'\nimport {formatExpression} from 'src/variables/utils/formatExpression'\nimport {VariableAssignment, Variable} from 'src/types'\nimport {asAssignment} from 'src/variables/selectors'\n\nexport const formatVarsOption = (\n variables: VariableAssignment[] | Variable[]\n): string => {\n if (!variables.length) {\n return ''\n }\n\n const lines = getAssignmentVariables(variables).map(\n v => `${v.id.name}: ${formatExpression(v.init)}`\n )\n\n const option = `option ${OPTION_NAME} = {\n ${lines.join(',\\n ')}\n}`\n\n return option\n}\n\nconst getAssignmentVariables = (\n variables: Variable[] | VariableAssignment[]\n): VariableAssignment[] => {\n const assignments = []\n\n // Looping over instead of map to get around ts interface signature incompatibility error\n variables.forEach(v => {\n if (!!v) {\n v.type === 'VariableAssignment'\n ? assignments.push(v)\n : assignments.push(asAssignment(v))\n }\n })\n\n return assignments.filter(v => !!v)\n}\n","import {Expression} from 'src/types/ast'\n\nexport const formatExpression = (expr: Expression): string => {\n switch (expr.type) {\n case 'DateTimeLiteral':\n case 'BooleanLiteral':\n case 'UnsignedIntegerLiteral':\n case 'IntegerLiteral':\n return String(expr.value)\n case 'StringLiteral':\n return `\"${expr.value}\"`\n case 'DurationLiteral':\n return expr.values.reduce(\n (acc, {magnitude, unit}) => `${acc}${magnitude}${unit}`,\n ''\n )\n case 'FloatLiteral':\n return String(expr.value).includes('.')\n ? String(expr.value)\n : expr.value.toFixed(1)\n case 'UnaryExpression':\n return `${expr.operator}${formatExpression(expr.argument)}`\n case 'BinaryExpression':\n return `${formatExpression(expr.left)} ${\n expr.operator\n } ${formatExpression(expr.right)}`\n case 'CallExpression':\n // This doesn't handle formatting a call expression with arguments, or\n // with any other sort of callee except an `Identifier`\n return `${formatExpression(expr.callee)}()`\n case 'Identifier':\n return expr.name\n default:\n throw new Error(`cant format expression of type ${expr.type}`)\n }\n}\n","export interface Template {\n type: string // a unique string that identifies a visualization\n init: (...args: string[]) => any // returns a flow state that will pass the hydrate function in src/flows/context/flow.list.tsx\n callback?: (...args: string[]) => any // optional callback func to return the newly created notebook id\n}\n\ninterface Templates {\n [type: string]: Template\n}\n\nexport const TEMPLATES: Templates = {}\n\nconst templateDefintionContext = require.context('./types', true, /\\.(ts|tsx)$/)\ntemplateDefintionContext.keys().forEach(templateDefinitionIndexFile => {\n const templateDefinitionModule = templateDefintionContext(\n templateDefinitionIndexFile\n )\n templateDefinitionModule.default((def: Template) => {\n TEMPLATES[def.type] = def\n })\n})\n","import {\n PatchNotebookParams,\n patchNotebook,\n PostNotebookParams,\n postNotebook,\n DeleteNotebookParams,\n deleteNotebook,\n getNotebooks,\n} from 'src/client/notebooksRoutes'\nimport {notebookUpdateFail} from 'src/shared/copy/notifications'\nimport {notify} from 'src/shared/actions/notifications'\n\nconst DEFAULT_API_FLOW: PatchNotebookParams = {\n id: '',\n data: {},\n}\nlet stagedFlow: PatchNotebookParams = DEFAULT_API_FLOW\nlet reportDecayTimeout = null\nlet reportMaxTimeout = null\n\nconst REPORT_DECAY = 500 // number of miliseconds to wait after last event before sending\nconst REPORT_MAX_WAIT = 5000 // max number of miliseconds to wait between sends\n\nexport const pooledUpdateAPI = (flow: PatchNotebookParams) => {\n stagedFlow = flow\n\n if (!!reportDecayTimeout) {\n clearTimeout(reportDecayTimeout)\n reportDecayTimeout = null\n }\n\n if (!reportMaxTimeout) {\n reportMaxTimeout = setTimeout(() => {\n reportMaxTimeout = null\n\n // flow already synced\n if (stagedFlow === DEFAULT_API_FLOW) {\n return\n }\n\n clearTimeout(reportDecayTimeout)\n reportDecayTimeout = null\n updateAPI(stagedFlow)\n\n stagedFlow = DEFAULT_API_FLOW\n }, REPORT_MAX_WAIT)\n }\n\n reportDecayTimeout = setTimeout(() => {\n updateAPI(stagedFlow)\n\n stagedFlow = DEFAULT_API_FLOW\n }, REPORT_DECAY)\n}\n\nexport const updateAPI = async (flow: PatchNotebookParams) => {\n const res = await patchNotebook(flow)\n if (res.status != 200) {\n throw new Error(res.data.message)\n }\n}\n\nexport const createAPI = async (flow: PostNotebookParams) => {\n const res = await postNotebook(flow)\n if (res.status != 200) {\n throw new Error(res.data.message)\n }\n return res.data\n}\n\nexport const deleteAPI = async (ids: DeleteNotebookParams) => {\n const res = await deleteNotebook(ids)\n if (res.status != 204) {\n throw new Error(res.data.message)\n }\n}\n\nexport const getAllAPI = async (orgID: string) => {\n const res = await getNotebooks({query: {orgID}})\n if (res.status != 200) {\n throw new Error(res.data.message)\n }\n return res.data\n}\n\nexport const migrateLocalFlowsToAPI = async (\n orgID: string,\n flows: {},\n serialize: Function,\n dispatch: Function\n) => {\n const localFlows = Object.keys(flows).filter(id => id.includes('local'))\n if (localFlows.length) {\n await Promise.all(\n localFlows.map(async localID => {\n const flow = flows[localID]\n const apiFlow: PostNotebookParams = serialize(flow, orgID)\n const {id} = await createAPI(apiFlow)\n delete flows[localID]\n flows[id] = flow\n })\n ).catch(() => {\n // do not throw the error because some flows might have saved and we\n // need to save the new IDs to avoid creating duplicates next time.\n dispatch(notify(notebookUpdateFail()))\n })\n }\n return flows\n}\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {useHistory} from 'react-router-dom'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {\n ButtonType,\n ComponentColor,\n ComponentStatus,\n IconFont,\n} from '@influxdata/clockface'\n\nimport {\n resourceLimitReached,\n taskCreatedSuccess,\n taskNotCreated,\n} from 'src/shared/copy/notifications'\nimport {ASSET_LIMIT_ERROR_STATUS} from 'src/cloud/constants/index'\nimport {postTask, patchTask} from 'src/client'\nimport {notify} from 'src/shared/actions/notifications'\nimport {checkTaskLimits} from 'src/cloud/actions/limits'\n\n// Components\nimport {Button} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowContext} from 'src/flows/context/flow.current'\nimport {FlowListContext} from 'src/flows/context/flow.list'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {getErrorMessage} from 'src/utils/api'\nimport {getOrg} from 'src/organizations/selectors'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {PROJECT_NAME_PLURAL} from 'src/flows'\nimport {missingUserInput} from 'src/shared/copy/notifications'\n\ninterface Props {\n text: string\n type: string\n generate?: () => string\n onCreate?: (task: any) => void\n disabled?: boolean\n}\n\nconst ExportTaskButton: FC = ({\n text,\n type,\n generate,\n onCreate,\n disabled,\n}) => {\n const {flow} = useContext(FlowContext)\n const {add} = useContext(FlowListContext)\n const {data} = useContext(PipeContext)\n const dispatch = useDispatch()\n const history = useHistory()\n const org = useSelector(getOrg)\n\n const onClick = async () => {\n let query\n\n try {\n query = generate ? generate() : data.query\n } catch (e) {\n dispatch(notify(missingUserInput(e.message)))\n return\n }\n\n event('Export Task Modal Skipped', {from: type, type: data.endpoint})\n let taskid\n\n // we can soft delete the previously connected task by marking the old one inactive\n if (data?.task?.id) {\n taskid = data.task.id\n } else if ((data?.task ?? []).length) {\n taskid = data.task[0].id\n }\n\n if (taskid) {\n patchTask({\n taskID: taskid,\n data: {\n status: 'inactive',\n },\n })\n\n if (isFlagEnabled('createWithFlows')) {\n fetch(\n `/api/v2private/notebooks/${flow.id}/resources?type=tasks&resource=${taskid}`,\n {\n method: 'GET',\n }\n )\n .then(resp => resp.json())\n .then(resp => {\n if (!resp.length) {\n return\n }\n\n fetch(\n `/api/v2private/notebooks/${flow.id}/resources/${resp[0].id}`,\n {\n method: 'DELETE',\n }\n )\n })\n }\n }\n\n try {\n const resp = await postTask({data: {orgID: org.id, flux: query}})\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n\n if (isFlagEnabled('createWithFlows')) {\n new Promise(resolve => {\n if (flow.id) {\n resolve(flow.id)\n return\n }\n\n add(flow).then(id => resolve(id))\n })\n .then(id => {\n return fetch(`/api/v2private/notebooks/${id}/resources`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n panel: data.id,\n resource: resp.data.id,\n type: 'tasks',\n }),\n }).then(() => {\n return id\n })\n })\n .then(id => {\n dispatch(notify(taskCreatedSuccess()))\n dispatch(checkTaskLimits())\n\n if (onCreate) {\n onCreate(resp.data)\n }\n\n if (id !== flow.id) {\n history.replace(\n `/orgs/${org.id}/${PROJECT_NAME_PLURAL.toLowerCase()}/${id}`\n )\n }\n })\n } else {\n if (onCreate) {\n onCreate(resp.data)\n }\n }\n } catch (error) {\n if (error?.response?.status === ASSET_LIMIT_ERROR_STATUS) {\n dispatch(notify(resourceLimitReached('tasks')))\n } else {\n const message = getErrorMessage(error)\n dispatch(notify(taskNotCreated(message)))\n }\n }\n }\n\n let status = ComponentStatus.Default\n if (disabled) {\n status = ComponentStatus.Disabled\n }\n\n return (\n \n )\n}\n\nexport default ExportTaskButton\n","import {FluxFunction} from 'src/types/shared'\n\n// temporary solution, for the top 20 functions\n// longterm solution requires changes in the payload from the backend (flux docs)\nconst TOP_20 = {\n 'universe.filter': 'filter(fn: (r) => r._measurement == \"cpu\")',\n 'universe.range': 'range(start: -15m, stop: now())',\n 'universe.sort': 'sort(columns: [\"_value\"], desc: false)',\n 'universe.keep': 'keep(columns: [\"col1\", \"col2\"])',\n 'universe.yield': 'yield(name: \"custom-name\")',\n 'universe.map': 'map(fn: (r) => ({ r with _value: r._value * r._value }))',\n 'universe.pivot':\n 'pivot(rowKey:[\"_time\"], columnKey: [\"_field\"], valueColumn: \"_value\")',\n 'universe.last': 'last()',\n 'universe.fill': 'fill(column: \"_value\", usePrevious: true)',\n 'universe.time': 'time(v: r._value)',\n 'universe.union': 'union(tables: [table1, table2])',\n 'universe.int': 'int(v: r._value)',\n 'events.duration': `events.duration(\n unit: 1ns,\n columnName: \"duration\",\n timeColumn: \"_time\",\n stopColumn: \"_stop\",\n stop: 2020-01-01T00:00:00Z\n)`,\n 'universe.group': 'group(columns: [\"host\", \"_measurement\"], mode:\"by\")',\n 'universe.aggregateWindow':\n 'aggregateWindow(every: v.windowPeriod, fn: mean)',\n 'universe.limit': 'limit(n:10, offset: 0)',\n 'universe.now': 'now()',\n 'universe.distinct': 'distinct(column: \"host\")',\n 'universe.sum': 'sum(column: \"_value\")',\n}\n\nexport const getFluxExample = (func: FluxFunction) => {\n const {fluxParameters = [], kind, name, package: packageName} = func\n\n let example = `${packageName}.${name}`\n\n if (!!TOP_20[example]) {\n return {...func, example: TOP_20[example]}\n }\n\n if (kind.toLowerCase() === 'function') {\n let injectedParameters = ''\n for (const parameter of fluxParameters) {\n if (parameter.required) {\n // add a comma if the current injected list is not all spaces\n if (injectedParameters.trim().length !== 0) {\n injectedParameters = `${injectedParameters}, `\n }\n injectedParameters = `${injectedParameters}${parameter.name}: `\n } else {\n injectedParameters = `${injectedParameters} `\n }\n }\n injectedParameters = injectedParameters.trim().length\n ? injectedParameters.trimLeft()\n : injectedParameters.trim()\n example =\n packageName === 'universe'\n ? `${name}(${injectedParameters})`\n : `${packageName}.${name}(${injectedParameters})`\n }\n return {...func, example}\n}\n","import React, {FC, useState, useMemo} from 'react'\n\nimport {\n EmptyState,\n ComponentSize,\n DapperScrollbars,\n} from '@influxdata/clockface'\nimport SearchWidget from 'src/shared/components/search_widget/SearchWidget'\n\ntype Item = Record\n\ninterface Props {\n placeholder: string\n emptyMessage: string\n extractor: (i: Item) => string\n items: Item[]\n renderItem: (i: Item) => JSX.Element\n listHeader?: () => JSX.Element\n setEventSearchTerm?: (searchTerm: string) => void\n}\n\nconst FilterList: FC = ({\n extractor,\n items,\n placeholder,\n emptyMessage,\n renderItem,\n listHeader,\n setEventSearchTerm,\n}) => {\n const [search, setSearch] = useState('')\n\n const onSearch = searchTerm => {\n if (setEventSearchTerm) {\n setEventSearchTerm(searchTerm)\n }\n setSearch(searchTerm)\n }\n const list = useMemo(() => {\n const filtered = items.filter(i =>\n extractor(i).toLowerCase().includes(search.toLowerCase())\n )\n\n if (!filtered.length) {\n return (\n \n {emptyMessage}\n \n )\n } else {\n return (\n <>\n {filtered.map((item, idx) => (\n
{renderItem(item)}
\n ))}\n \n )\n }\n }, [search, items, renderItem])\n\n return useMemo(\n () => (\n
\n
\n \n
\n {!!listHeader && listHeader()}\n
\n {list}\n
\n
\n ),\n [list, setSearch]\n )\n}\n\nexport default FilterList\n","// Libraries\nimport React, {CSSProperties, FC} from 'react'\n\nconst generateGradientStyle = (colors: string[]): CSSProperties => {\n const stops = colors\n .map((hex, i) => `${hex} ${Math.round((i / (colors.length - 1)) * 100)}%`)\n .join(', ')\n\n return {\n background: `linear-gradient(to right, ${stops})`,\n }\n}\n\ninterface Props {\n name: string\n colors: string[]\n}\n\nconst ColorSchemeDropdownItem: FC = ({name, colors}) => {\n return (\n
\n \n
{name}
\n
\n )\n}\n\nexport default ColorSchemeDropdownItem\n","// Libraries\nimport React, {ChangeEvent, CSSProperties, FC} from 'react'\n\n// Components\nimport {\n AlignItems,\n Appearance,\n ComponentColor,\n ComponentSize,\n FlexBox,\n FlexDirection,\n Form,\n InfluxColors,\n InputLabel,\n InputToggleType,\n RangeSlider,\n SlideToggle,\n Toggle,\n} from '@influxdata/clockface'\n\n// Constants\nimport {\n LEGEND_OPACITY_DEFAULT,\n LEGEND_OPACITY_MAXIMUM,\n LEGEND_OPACITY_MINIMUM,\n LEGEND_OPACITY_STEP,\n LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL,\n LEGEND_ORIENTATION_THRESHOLD_VERTICAL,\n} from 'src/visualization/constants'\n\n// Metrics\nimport {event} from 'src/cloud/utils/reporting'\n\n// Styles\nimport 'src/visualization/components/internal/LegendOptions.scss'\n\ninterface OrientationToggleProps {\n eventName: string\n graphType: string\n legendOrientation: number\n parentName: string\n handleSetOrientation: (threshold: number) => void\n testID?: string\n}\n\ninterface OpacitySliderProps {\n legendOpacity: number\n handleSetOpacity: (event: ChangeEvent) => void\n testID?: string\n}\n\ninterface ColorizeRowsToggleProps {\n legendColorizeRows: boolean\n handleSetColorization: () => void\n testID?: string\n}\n\nconst getToggleColor = (toggle: boolean): CSSProperties => {\n if (toggle) {\n return {color: InfluxColors.Grey95}\n }\n return {color: InfluxColors.Grey65}\n}\n\nexport const OrientationToggle: FC = ({\n eventName,\n graphType,\n legendOrientation,\n parentName,\n handleSetOrientation,\n testID = 'orientation-toggle',\n}) => {\n const setOrientation = (orientation: string): void => {\n if (orientation === 'vertical') {\n handleSetOrientation(LEGEND_ORIENTATION_THRESHOLD_VERTICAL)\n } else {\n handleSetOrientation(LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL)\n }\n event(`${eventName}.${orientation}`, {\n type: graphType,\n })\n }\n return (\n \n Orientation\n \n \n Horizontal\n \n \n \n \n Vertical\n \n \n \n )\n}\n\nexport const OpacitySlider: FC = ({\n legendOpacity,\n handleSetOpacity,\n testID = 'opacity-slider',\n}) => {\n let validOpacity = LEGEND_OPACITY_DEFAULT\n if (\n typeof legendOpacity === 'number' &&\n legendOpacity === legendOpacity &&\n legendOpacity >= LEGEND_OPACITY_MINIMUM &&\n legendOpacity <= LEGEND_OPACITY_MAXIMUM\n ) {\n validOpacity = legendOpacity\n }\n const percentLegendOpacity = (validOpacity * 100).toFixed(0)\n\n return (\n \n \n \n )\n}\n\nexport const ColorizeRowsToggle: FC = ({\n legendColorizeRows,\n handleSetColorization,\n testID = 'colorize-rows-toggle',\n}) => {\n return (\n \n \n \n Colorize Rows\n \n \n )\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./LegendOptions.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport {Table, LineInterpolation, FromFluxResult} from '@influxdata/giraffe'\nimport {S2} from 's2-geometry'\n\n// Types\nimport {Axis, LatLonColumns, XYGeom} from 'src/types'\n\nexport const HEX_DIGIT_PRECISION = 16\n\n/*\n A geom may be stored as \"line\", \"step\", \"monotoneX\", \"bar\", \"stacked\", \"stepBefore\", or \"stepAfter\", but\n we currently only support the \"line\", \"step\", \"stepBefore\", \"stepAfter\", and \"monotoneX\" geoms.\n*/\nexport const resolveGeom = (geom: XYGeom) => {\n if (\n geom === 'step' ||\n geom === 'monotoneX' ||\n geom === 'stepBefore' ||\n geom === 'stepAfter'\n ) {\n return geom\n }\n\n return 'line'\n}\n\nexport const geomToInterpolation = (geom: XYGeom): LineInterpolation => {\n const resolvedGeom = resolveGeom(geom)\n\n switch (resolvedGeom) {\n case 'step':\n return 'step'\n case 'monotoneX':\n return 'monotoneX'\n case 'stepBefore':\n return 'stepBefore'\n case 'stepAfter':\n return 'stepAfter'\n default:\n return 'linear'\n }\n}\n\nexport const NOISY_LEGEND_COLUMN_NAMES = ['_start', '_stop', 'result']\nconst NOISY_LEGEND_COLUMNS = new Set(NOISY_LEGEND_COLUMN_NAMES)\n\n/*\n Some columns (e.g. `_start` and `_stop`) appear frequently in Flux group\n keys, but rarely affect the actual grouping of data since every value in the\n response for these columns is equal. When this is the case, we hide these\n columns in the hover legend.\n*/\nexport const filterNoisyColumns = (columns: string[], table: Table): string[] =>\n columns.filter(key => {\n if (!NOISY_LEGEND_COLUMNS.has(key)) {\n return true\n }\n\n const keyData = table.getColumn(key)\n\n if (keyData === null) {\n return false\n }\n\n for (const d of keyData) {\n if (d !== keyData[0]) {\n return true\n }\n }\n\n return false\n })\n\nexport const parseXBounds = (\n bounds: Axis['bounds']\n): [number, number] | null => {\n if (\n !bounds ||\n !bounds[0] ||\n !bounds[1] ||\n isNaN(+bounds[0]) ||\n isNaN(+bounds[1])\n ) {\n return null\n }\n\n return [+bounds[0], +bounds[1]]\n}\n\nexport const parseYBounds = (\n bounds: Axis['bounds']\n): [number | null, number | null] | null => {\n if (!bounds || (!bounds[0] && !bounds[1])) {\n return null\n }\n\n const min = isNaN(parseFloat(bounds[0])) ? null : parseFloat(bounds[0])\n const max = isNaN(parseFloat(bounds[1])) ? null : parseFloat(bounds[1])\n return [min, max]\n}\n\nexport const extent = (xs: number[]): [number, number] | null => {\n if (!xs || !xs.length) {\n return null\n }\n\n let low = Infinity\n let high = -Infinity\n\n for (const x of xs) {\n if (x < low) {\n low = x\n }\n\n if (x > high) {\n high = x\n }\n }\n\n if (low === Infinity || high === -Infinity) {\n return null\n }\n\n return [low, high]\n}\n\nexport const checkResultsLength = (giraffeResult: FromFluxResult): boolean => {\n return (giraffeResult.table?.length || 0) > 0\n}\n\nexport const getNumericColumns = (table: Table): string[] => {\n const timeColumns = table.columnKeys.filter(k => {\n if (k === 'result' || k === 'table') {\n return false\n }\n\n const columnType = table.getColumnType(k)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n return timeColumns\n}\n\nexport const getTimeColumns = (table: Table): string[] => {\n const timeColumns = table.columnKeys.filter(k => {\n if (k === 'result' || k === 'table') {\n return false\n }\n\n const columnType = table.getColumnType(k)\n return columnType === 'time'\n })\n\n return timeColumns\n}\n\nexport const getNumberColumns = (table: Table): string[] => {\n const numberColumnKeys = table.columnKeys.filter(k => {\n if (k === 'result' || k === 'table') {\n return false\n }\n\n const columnType = table.getColumnType(k)\n return columnType === 'number'\n })\n\n return numberColumnKeys\n}\n\nexport const getStringColumns = (table: Table): string[] => {\n const stringColumnKeys = table.columnKeys.filter(k => {\n if (k === 'result' || k === 'table') {\n return false\n }\n\n const columnType = table.getColumnType(k)\n\n return columnType === 'string'\n })\n\n return stringColumnKeys\n}\n\nexport const getGroupableColumns = (table: Table): string[] => {\n const invalidGroupColumns = new Set(['_value', '_time', 'table'])\n const groupableColumns = table.columnKeys.filter(\n name => !invalidGroupColumns.has(name)\n )\n\n return groupableColumns\n}\n\n/*\n Previously we would automatically select an x and y column setting for an\n `XYView` based on the current Flux response. We then added support for an\n explicit x and y column setting by adding `xColumn` and `yColumn` fields to\n the `XYView`.\n\n We did not migrate existing views when adding the fields, so the fields are\n considered optional. Thus to resolve the correct x and y column selections\n for an `XYView`, we need to:\n\n 1. Use the `xColumn` and `yColumn` fields if they exist\n 2. Fall back to automatically selecting and x and y column if not\n\n A `null` result from this function indicates that no valid selection could be\n made.\n*/\n\nexport const defaultXColumn = (\n table: Table,\n preferredColumnKey?: string\n): string | null => {\n const validColumnKeys = [...getTimeColumns(table), ...getNumberColumns(table)]\n if (validColumnKeys.includes(preferredColumnKey)) {\n return preferredColumnKey\n }\n for (const key of ['_time', '_stop', '_start']) {\n if (validColumnKeys.includes(key)) {\n return key\n }\n }\n\n if (validColumnKeys.length) {\n return validColumnKeys[0]\n }\n\n return null\n}\n\n/*\n See `defaultXColumn`.\n*/\nexport const defaultYColumn = (\n table: Table,\n preferredColumnKey?: string\n): string | null => {\n const validColumnKeys = [...getTimeColumns(table), ...getNumberColumns(table)]\n\n if (validColumnKeys.includes(preferredColumnKey)) {\n return preferredColumnKey\n }\n\n for (const key of validColumnKeys) {\n if (key.startsWith('_value')) {\n return key\n }\n }\n\n if (validColumnKeys.length) {\n return validColumnKeys[0]\n }\n\n return null\n}\n\nexport const defaultYSeriesColumns = (\n table: Table,\n preferredYSeriesColumns: Array\n): Array => {\n const validColumnKeys = [...getStringColumns(table)]\n let ySeriesColumns = []\n\n if (Array.isArray(preferredYSeriesColumns)) {\n ySeriesColumns = preferredYSeriesColumns.filter(columnKey =>\n validColumnKeys.includes(columnKey)\n )\n }\n if (ySeriesColumns.length === 0) {\n const defaultKey = validColumnKeys.find(\n columnKey => columnKey.startsWith('_') === false\n )\n if (defaultKey) {\n ySeriesColumns.push(defaultKey)\n }\n }\n\n return ySeriesColumns\n}\n\nexport const defaultYLabelColumns = (\n preferredYSeriesColumns: Array,\n validYSeriesColumns: Array\n): Array => {\n return Array.isArray(preferredYSeriesColumns) &&\n Array.isArray(validYSeriesColumns)\n ? preferredYSeriesColumns.filter(columnKey =>\n validYSeriesColumns.includes(columnKey)\n )\n : []\n}\n\nexport const isInDomain = (value: number, domain: number[]) =>\n value >= domain[0] && value <= domain[1]\n\nexport const clamp = (value: number, domain: number[]) => {\n if (value < domain[0]) {\n return domain[0]\n }\n\n if (value > domain[1]) {\n return domain[1]\n }\n\n return value\n}\n\nexport const getMainColumnName = (\n selectedFunctions: string[],\n upperColumn: string,\n mainColumn: string,\n lowerColumn: string\n): string => {\n const hasMainColumn = selectedFunctions.some(\n funcName => funcName === mainColumn\n )\n\n if (hasMainColumn) {\n return mainColumn\n }\n\n for (let i = 0; i < selectedFunctions.length; i += 1) {\n const func = selectedFunctions[i]\n if (func !== upperColumn && func !== lowerColumn) {\n return func\n }\n }\n return ''\n}\n\nexport enum CoordinateType {\n S2 = 'S2 cell id',\n Tags = 'Lat/long as tags',\n Fields = 'Lat/Long as fields',\n None = 'Lat/Long not provided',\n}\n\nconst getS2CellID = (s2Column: string, table: Table, index: number): string => {\n const column = table.getColumn(s2Column)\n if (!column) {\n throw new Error(\n 'Cannot retrieve s2_cell_id column - table does not conform to required structure of Table type'\n )\n }\n\n const value = column[index]\n if (typeof value !== 'string') {\n throw new Error('invalid s2_cell_id column value - value must be a string')\n }\n return value\n}\n\nconst getPrecisionTrimmingTableValue = (): bigint[] => {\n const precisionTable = [BigInt(1)]\n for (let i = 1; i <= HEX_DIGIT_PRECISION; i++) {\n precisionTable[i] = precisionTable[i - 1] * BigInt(HEX_DIGIT_PRECISION)\n }\n return precisionTable\n}\n\nconst getCoordinateFromS2 = (s2Column, table, index) => {\n const cellId = getS2CellID(s2Column, table, index)\n\n if (cellId.length > HEX_DIGIT_PRECISION) {\n throw new Error(\n 'invalid cellId length - value must not be longer than the defined hex digit precision'\n )\n }\n\n const fixed =\n BigInt('0x' + cellId) *\n getPrecisionTrimmingTableValue()[HEX_DIGIT_PRECISION - cellId.length]\n\n const geoCoordinateValue = S2.idToLatLng(fixed.toString())\n\n return {\n lat: geoCoordinateValue.lat,\n lon: geoCoordinateValue.lng,\n }\n}\n\nconst getColumnValue = (table: Table, field: string) => {\n const fieldColumn = table.getColumn('_field')\n\n if (!fieldColumn) {\n throw new Error(\n 'Cannot retrieve _field column - table does not conform to required structure of Table type'\n )\n }\n const index = fieldColumn.findIndex(val => val === field)\n if (index < 0) {\n throw new Error('Map type requires the fields to be either lat or lon')\n }\n const valueColumn = table.getColumn('_value')\n const value = valueColumn[index]\n\n return value\n}\n\nexport const parseCoordinates = coordinate =>\n parseInt(coordinate.toString(), 10)\n\nconst latLonAsTags = latLonColumns => {\n return latLonColumns?.lat?.key === 'tag' && latLonColumns?.lon?.key === 'tag'\n}\n\nconst getCoordinateColumn = (\n table: Table,\n useS2CellID: boolean,\n s2Column: string,\n latLonColumns: LatLonColumns\n): string => {\n try {\n if (useS2CellID && s2Column !== '') {\n const column = table.getColumn(s2Column || 's2_cell_id')\n if (column !== null) {\n return CoordinateType.S2\n }\n }\n if (latLonAsTags(latLonColumns)) {\n const lat = table.getColumn(latLonColumns?.lat?.column || 'lat')\n const lon = table.getColumn(latLonColumns?.lon?.column || 'lon')\n\n if (lat !== null && lon !== null) {\n return CoordinateType.Tags\n }\n }\n\n const latCoordinate = getColumnValue(\n table,\n latLonColumns?.lat?.column || 'lat'\n )\n const lonCoordinate = getColumnValue(\n table,\n latLonColumns?.lon?.column || 'lon'\n )\n\n if (latCoordinate && lonCoordinate) {\n return CoordinateType.Fields\n }\n\n return CoordinateType.None\n } catch {\n throw new Error('lat_lon_not_found')\n }\n}\n\nexport const getGeoCoordinates = (\n table: Table,\n index: number,\n useS2CellID: boolean,\n s2Column: string,\n latLonColumns: LatLonColumns\n): {lon: number; lat: number} | null => {\n const coordinateColumn = getCoordinateColumn(\n table,\n useS2CellID,\n s2Column,\n latLonColumns\n )\n\n switch (coordinateColumn) {\n case CoordinateType.S2:\n return getCoordinateFromS2(s2Column, table, index)\n case CoordinateType.Tags:\n const latColumn = table.getColumn(latLonColumns?.lat?.column || 'lat')\n const latParsed = parseCoordinates(latColumn[index])\n const lonColumn = table.getColumn(latLonColumns?.lon?.column || 'lon')\n const lonParsed = parseCoordinates(lonColumn[index])\n if (isNaN(latParsed) || isNaN(lonParsed)) {\n throw new Error('lat_lon_not_provided')\n }\n return {\n lat: latParsed,\n lon: lonParsed,\n }\n case CoordinateType.Fields:\n const latCoordinate = getColumnValue(\n table,\n latLonColumns?.lat?.column || 'lat'\n )\n const latCoordinateParsed = parseCoordinates(latCoordinate)\n const lonCoordinate = getColumnValue(\n table,\n latLonColumns?.lon?.column || 'lon'\n )\n const lonCoordinateParsed = parseCoordinates(lonCoordinate)\n if (isNaN(latCoordinateParsed) || isNaN(lonCoordinateParsed)) {\n throw new Error('lat_lon_not_provided')\n }\n return {\n lat: latCoordinateParsed,\n lon: lonCoordinateParsed,\n }\n default:\n throw new Error('lat_lon_not_provided')\n }\n}\n","import React from 'react'\n\nexport const convertUserInputValueToNumOrNaN = (value?: any): number =>\n value === '' ? NaN : Number(value)\n\nexport const convertUserInputToNumOrNaN = (\n event: React.ChangeEvent\n): number => convertUserInputValueToNumOrNaN(event.target.value)\n","// APIs\nimport {\n findKeys,\n findValues,\n FindKeysOptions,\n FindValuesOptions,\n} from 'src/timeMachine/apis/queryBuilder'\n\n// Types\nimport {CancelBox} from 'src/types'\n\ntype CancelableQuery = CancelBox\n\nclass QueryBuilderFetcher {\n private findKeysQueries: CancelableQuery[] = []\n private findValuesQueries: CancelableQuery[] = []\n private findKeysCache: {[key: string]: string[]} = {}\n private findValuesCache: {[key: string]: string[]} = {}\n\n public async findKeys(\n index: number,\n options: FindKeysOptions\n ): Promise {\n this.cancelFindKeys(index)\n\n const cacheKey = JSON.stringify(options)\n const cachedResult = this.findKeysCache[cacheKey]\n\n if (cachedResult) {\n return Promise.resolve(cachedResult)\n }\n\n const pendingResult = findKeys(options)\n\n this.findKeysQueries[index] = pendingResult\n\n pendingResult.promise\n .then(result => {\n this.findKeysCache[cacheKey] = result\n })\n .catch(() => {})\n\n return pendingResult.promise\n }\n\n public cancelFindKeys(index: number): void {\n if (this.findKeysQueries[index]) {\n this.findKeysQueries[index].cancel()\n }\n }\n\n public async findValues(\n index: number,\n options: FindValuesOptions\n ): Promise {\n this.cancelFindValues(index)\n\n const cacheKey = JSON.stringify(options)\n const cachedResult = this.findValuesCache[cacheKey]\n\n if (cachedResult) {\n return Promise.resolve(cachedResult)\n }\n\n const pendingResult = findValues(options)\n\n this.findValuesQueries[index] = pendingResult\n\n pendingResult.promise\n .then(result => {\n this.findValuesCache[cacheKey] = result\n })\n .catch(() => {})\n\n return pendingResult.promise\n }\n\n public cancelFindValues(index: number): void {\n if (this.findValuesQueries[index]) {\n this.findValuesQueries[index].cancel()\n }\n }\n\n public clearCache(): void {\n this.findKeysCache = {}\n this.findValuesCache = {}\n }\n}\n\nexport const queryBuilderFetcher = new QueryBuilderFetcher()\n","import React from 'react'\n\nexport const TOOLTIP_PORTAL_ID = 'tooltip-portal'\n\nconst TooltipPortal = () => {\n return
\n}\n\nexport default TooltipPortal\n","// Libraries\nimport React, {FC} from 'react'\n\ninterface Props {\n label: string\n checked: boolean\n onSetChecked: (checked: boolean) => void\n testID?: string\n}\n\n// TODO: Replace this with the Clockface checkbox once available\n//\n// See https://github.com/influxdata/influxdb/issues/14125.\nconst Checkbox: FC = ({label, checked, onSetChecked, testID}) => {\n return (\n \n )\n}\n\nexport default Checkbox\n","// Libraries\nimport React, {FC, ChangeEvent} from 'react'\n\nconst copy = async (text: string): Promise => {\n let result: boolean\n try {\n if (navigator.clipboard) {\n // All browsers except IE\n await navigator.clipboard.writeText(text)\n } else {\n // IE\n const successful = document.execCommand('copy')\n if (!successful) {\n throw new Error('Copy command was unsuccessful using execCommand')\n }\n }\n result = true\n } catch (err) {\n result = false\n }\n return result\n}\ninterface Props {\n text: string\n children: JSX.Element\n onCopy?: (copiedText: string, copyWasSuccessful: boolean) => void\n}\n\nconst CopyToClipboard: FC = ({text, children, onCopy, ...props}) => {\n const elem = React.Children.only(children)\n\n const onClick = async (event: ChangeEvent) => {\n const result = await copy(text)\n\n if (onCopy) {\n onCopy(text, result)\n }\n\n // Bypass onClick if it was present\n if (elem && elem.props && typeof elem.props.onClick === 'function') {\n elem.props.onClick(event)\n }\n }\n\n return React.cloneElement(elem, {...props, onClick})\n}\n\nexport default CopyToClipboard\n","// Libraries\nimport React, {FunctionComponent, useState, useEffect} from 'react'\nimport classnames from 'classnames'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\n// Components\nimport {TechnoSpinner, ComponentSize} from '@influxdata/clockface'\n\nconst VISUALIZATION_LOADING_SPINNER_DIAMETER = 66\n\ninterface Props {\n loading: RemoteDataState\n}\n\nconst ViewLoadingSpinner: FunctionComponent = ({loading}) => {\n const [timerActive, setTimerActive] = useState(false)\n const [seconds, setSeconds] = useState(0)\n\n const timerElementClass = classnames('view-loading-spinner--timer', {\n visible: seconds > 5,\n })\n\n const resetTimer = (): void => {\n setSeconds(0)\n setTimerActive(false)\n }\n\n useEffect(() => {\n if (loading === RemoteDataState.Done || RemoteDataState.Error) {\n resetTimer()\n }\n\n if (loading === RemoteDataState.Loading) {\n setTimerActive(true)\n }\n }, [loading])\n\n useEffect(() => {\n let interval = null\n if (timerActive) {\n interval = setInterval(() => {\n setSeconds(seconds => seconds + 0.1)\n }, 100)\n } else if (!timerActive && seconds !== 0) {\n clearInterval(interval)\n }\n return () => clearInterval(interval)\n }, [timerActive, seconds])\n\n if (loading === RemoteDataState.Loading) {\n return (\n
\n \n
{`${\n Math.round(seconds * 10) / 10\n }s`}
\n
\n )\n }\n\n return null\n}\n\nexport default ViewLoadingSpinner\n","import {ReactNode} from 'react'\nimport {ResourceType} from 'src/types/resources'\n\nexport interface ResourceConnectedQuery {\n type: ResourceType\n flux: string\n data: T\n}\n\nexport interface ResourceRegistration {\n type: ResourceType\n disabled?: boolean\n editor: ReactNode\n init: (...args: string[]) => Promise>\n persist: (\n query: ResourceConnectedQuery\n ) => Promise>\n}\n\ninterface Resources {\n [type: string]: ResourceRegistration\n}\n\nexport const RESOURCES: Resources = {}\n// eslint-disable-next-line no-extra-semi\n;[require('./types/script')].forEach(mod => {\n mod.default((def: ResourceRegistration) => {\n if (RESOURCES.hasOwnProperty(def.type)) {\n throw new Error(\n `Resource of type [${def.type}] has already been registered`\n )\n }\n\n RESOURCES[def.type] = {\n ...def,\n }\n })\n})\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Scripts {\n scripts?: Script[]\n}\n\nexport interface Script {\n readonly id?: string\n name: string\n description?: string\n orgID: string\n script: string\n language?: ScriptLanguage\n url?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n}\n\nexport type ScriptLanguage = 'flux'\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport interface ScriptCreateRequest {\n name: string\n description: string\n script: string\n language: ScriptLanguage\n}\n\nexport interface ScriptUpdateRequest {\n name?: string\n description?: string\n script?: string\n}\n\nexport interface ScriptInvocationParams {\n params?: any\n}\n\nexport type ScriptHTTPResponseData = string\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function(\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function(\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function(\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function(\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetScriptsParams {\n query?: {\n limit?: number\n offset?: number\n }\n}\n\ntype GetScriptsResult =\n | GetScriptsOKResult\n | GetScriptsBadRequestResult\n | GetScriptsUnauthorizedResult\n | GetScriptsInternalServerErrorResult\n | GetScriptsDefaultResult\n\ninterface GetScriptsOKResult {\n status: 200\n headers: Headers\n data: Scripts\n}\n\ninterface GetScriptsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetScriptsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetScriptsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetScriptsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScripts = (\n params: GetScriptsParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/scripts', params, options) as Promise<\n GetScriptsResult\n >\n\nexport interface PostScriptParams {\n data: ScriptCreateRequest\n}\n\ntype PostScriptResult =\n | PostScriptCreatedResult\n | PostScriptBadRequestResult\n | PostScriptUnauthorizedResult\n | PostScriptUnprocessableEntityResult\n | PostScriptInternalServerErrorResult\n | PostScriptDefaultResult\n\ninterface PostScriptCreatedResult {\n status: 201\n headers: Headers\n data: Script\n}\n\ninterface PostScriptBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostScriptUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostScriptUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostScriptInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostScriptDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScript = (\n params: PostScriptParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/scripts',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetScriptParams {\n scriptID: string\n}\n\ntype GetScriptResult = GetScriptOKResult | GetScriptDefaultResult\n\ninterface GetScriptOKResult {\n status: 200\n headers: Headers\n data: Script\n}\n\ninterface GetScriptDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScript = (\n params: GetScriptParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/scripts/${params.scriptID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchScriptParams {\n scriptID: string\n\n data: ScriptUpdateRequest\n}\n\ntype PatchScriptResult = PatchScriptOKResult | PatchScriptDefaultResult\n\ninterface PatchScriptOKResult {\n status: 200\n headers: Headers\n data: Script\n}\n\ninterface PatchScriptDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchScript = (\n params: PatchScriptParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/scripts/${params.scriptID}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteScriptParams {\n scriptID: string\n}\n\ntype DeleteScriptResult =\n | DeleteScriptNoContentResult\n | DeleteScriptDefaultResult\n\ninterface DeleteScriptNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteScriptDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteScript = (\n params: DeleteScriptParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/scripts/${params.scriptID}`,\n params,\n options\n ) as Promise\n\nexport interface PostScriptsInvokeParams {\n scriptID: string\n\n data?: ScriptInvocationParams\n}\n\ntype PostScriptsInvokeResult =\n | PostScriptsInvokeOKResult\n | PostScriptsInvokeBadRequestResult\n | PostScriptsInvokeUnauthorizedResult\n | PostScriptsInvokeNotFoundResult\n | PostScriptsInvokeInternalServerErrorResult\n | PostScriptsInvokeDefaultResult\n\ninterface PostScriptsInvokeOKResult {\n status: 200\n headers: Headers\n data: ScriptHTTPResponseData\n}\n\ninterface PostScriptsInvokeBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostScriptsInvokeUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostScriptsInvokeNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostScriptsInvokeInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostScriptsInvokeDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScriptsInvoke = (\n params: PostScriptsInvokeParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/scripts/${params.scriptID}/invoke`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n","// Libraries\nimport React, {FC} from 'react'\n\n// Components\nimport {Dropdown, DropdownMenuTheme} from '@influxdata/clockface'\nimport ColorSchemeDropdownItem from 'src/visualization/components/internal/ColorSchemeDropdownItem'\n\ninterface Props {\n colorSchemes: Array<{name: string; colors: string[]}>\n selectedColorScheme: string[]\n onSelectColorScheme: (scheme: string[]) => void\n}\n\nconst HexColorSchemeDropdown: FC = ({\n colorSchemes,\n selectedColorScheme,\n onSelectColorScheme,\n}) => {\n const selected = colorSchemes.find(\n scheme =>\n scheme.colors.length === selectedColorScheme.length &&\n scheme.colors.every((color, i) => color === selectedColorScheme[i])\n )\n\n let selectedName\n let resolvedSchemes\n\n if (selected) {\n selectedName = selected.name\n resolvedSchemes = colorSchemes\n } else {\n selectedName = 'Custom'\n resolvedSchemes = [\n ...colorSchemes,\n {name: 'Custom', colors: selectedColorScheme},\n ]\n }\n\n return (\n (\n \n \n \n )}\n menu={onCollapse => (\n \n {resolvedSchemes.map(({name, colors}) => (\n \n \n \n ))}\n \n )}\n />\n )\n}\n\nexport default HexColorSchemeDropdown\n","// Libraries\nimport React, {PureComponent} from 'react'\n\n// Components\nimport {DapperScrollbars} from '@influxdata/clockface'\n\n// Utils\nimport {humanizeNote} from 'src/dashboards/utils/notes'\n\n// Decorators\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\nimport {MarkdownRenderer} from 'src/shared/components/views/MarkdownRenderer'\n\ninterface Props {\n text: string\n}\n\n@ErrorHandling\nclass ScrollableMarkdown extends PureComponent {\n public render() {\n const {text} = this.props\n\n return (\n \n
\n \n
\n
\n )\n }\n}\n\nexport default ScrollableMarkdown\n","// Libraries\nimport HoneyBadger from 'honeybadger-js'\nimport {Dispatch} from 'react'\n\n// Functions making API calls\nimport {getMe as getIdpeMe} from 'src/client'\n\n// Utils\nimport {gaEvent, updateReportingContext} from 'src/cloud/utils/reporting'\n\n// Actions\nimport {\n setMe,\n setQuartzMe,\n setQuartzMeStatus,\n Actions as MeActions,\n} from 'src/me/actions/creators'\n\n// Reducers\nimport {MeState} from 'src/me/reducers'\n\n// Types\nimport {RemoteDataState} from 'src/types'\nimport {Actions} from 'src/me/actions/creators'\nimport {fetchQuartzMe} from 'src/identity/apis/auth'\n\nexport const getIdpeMeThunk = () => async (dispatch: Dispatch) => {\n try {\n const resp = await getIdpeMe({})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n const user = resp.data\n\n updateReportingContext({userID: user.id, userEmail: user.name})\n\n gaEvent('cloudAppUserDataReady', {\n identity: {\n id: user.id,\n email: user.name,\n },\n })\n\n HoneyBadger.setContext({\n user_id: user.id,\n })\n\n dispatch(setMe(user as MeState))\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const getQuartzMeThunk = () => async (dispatch: Dispatch) => {\n try {\n dispatch(setQuartzMeStatus(RemoteDataState.Loading))\n\n const quartzMe = await fetchQuartzMe()\n\n dispatch(setQuartzMe(quartzMe, RemoteDataState.Done))\n } catch (error) {\n console.error(error)\n dispatch(setQuartzMeStatus(RemoteDataState.Error))\n }\n}\n","module.exports = __webpack_public_path__ + \"f147495964.svg\";","export const DEFAULT_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'\nexport const STRICT_ISO8061_TIME_FORMAT = 'STRICT_ISO8061_TIME_FORMAT'\nexport const RFC3339_PATTERN =\n /(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)(\\s|T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))/\n\n// Hard-coded dates required by the backend for caching purposes\nexport const CACHING_REQUIRED_START_DATE = '1677-09-21T00:12:43.145224194Z'\nexport const CACHING_REQUIRED_END_DATE = '2262-04-11T23:47:16.854775806Z'\n\nexport const MILLISECONDS_IN_ONE_DAY = 1000 * 60 * 60 * 24\n","import React, {FC} from 'react'\nimport {\n SpinnerContainer,\n TechnoSpinner,\n RemoteDataState,\n} from '@influxdata/clockface'\n\ninterface Props {\n loading?: RemoteDataState\n children?: React.ReactChild\n}\n\nconst PageSpinner: FC = ({loading, children}) => {\n return (\n }\n >\n {children}\n \n )\n}\n\nexport default PageSpinner\n","// Libraries\nimport React, {FC} from 'react'\n\n// Components\nimport {List, ComponentSize} from '@influxdata/clockface'\n\ninterface Props {\n items: string[]\n selectedItems: string[]\n onSelectItem: (item: string) => void\n multiSelect: boolean\n children?: JSX.Element | JSX.Element[]\n testID?: string\n wrapText?: boolean\n}\n\nconst SelectorList: FC = props => {\n const {\n items,\n selectedItems,\n onSelectItem,\n multiSelect,\n children,\n testID,\n wrapText,\n } = props\n\n return (\n \n {items.map(item => {\n const selected = selectedItems.includes(item)\n\n const indicator = multiSelect && \n\n return (\n \n {indicator}\n {item}\n \n )\n })}\n {children}\n \n )\n}\n\nexport default SelectorList\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType, GenLabel} from 'src/types'\n\n// Utils\nimport {addLabelDefaults} from 'src/labels/utils'\n\n/* Labels */\nexport const labelSchema = new schema.Entity(\n ResourceType.Labels,\n {},\n {\n processStrategy: (label: GenLabel) => addLabelDefaults(label),\n }\n)\n\nexport const arrayOfLabels = [labelSchema]\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport type FluxdocsArray = Fluxdocs[]\n\nexport interface Fluxdocs {\n path: string\n package: string\n name: string\n kind: string\n headline: string\n fluxType: string\n description?: string\n fluxParameters?: FluxdocsParameters[]\n}\n\nexport interface FluxdocsParameters {\n description?: string\n headline: string\n name: string\n required: boolean\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetFluxdocsParams {}\n\ntype GetFluxdocsResult =\n | GetFluxdocsOKResult\n | GetFluxdocsUnauthorizedResult\n | GetFluxdocsInternalServerErrorResult\n\ninterface GetFluxdocsOKResult {\n status: 200\n headers: Headers\n data: FluxdocsArray\n}\n\ninterface GetFluxdocsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetFluxdocsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getFluxdocs = (\n params: GetFluxdocsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/fluxdocs',\n params,\n options\n ) as Promise\n\nexport interface GetFluxdocParams {\n id: string\n}\n\ntype GetFluxdocResult =\n | GetFluxdocOKResult\n | GetFluxdocBadRequestResult\n | GetFluxdocUnauthorizedResult\n | GetFluxdocInternalServerErrorResult\n\ninterface GetFluxdocOKResult {\n status: 200\n headers: Headers\n data: Fluxdocs\n}\n\ninterface GetFluxdocBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetFluxdocUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetFluxdocInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getFluxdoc = (\n params: GetFluxdocParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/fluxdocs/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface GetFluxdocsSearchParams {\n searchTerm: string\n\n query?: {\n field?: string\n }\n}\n\ntype GetFluxdocsSearchResult =\n | GetFluxdocsSearchOKResult\n | GetFluxdocsSearchBadRequestResult\n | GetFluxdocsSearchUnauthorizedResult\n | GetFluxdocsSearchInternalServerErrorResult\n\ninterface GetFluxdocsSearchOKResult {\n status: 200\n headers: Headers\n data: FluxdocsArray\n}\n\ninterface GetFluxdocsSearchBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetFluxdocsSearchUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetFluxdocsSearchInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getFluxdocsSearch = (\n params: GetFluxdocsSearchParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/fluxdocs/search/${params.searchTerm}`,\n params,\n options\n ) as Promise\n","// Libraries\nimport {Dispatch} from 'react'\nimport {get} from 'lodash'\n\n// API\nimport {FluxdocsArray, getFluxdocs} from 'src/client/fluxdocsdRoutes'\n\n// Actions\nimport {getFluxPackagesFailed} from 'src/shared/copy/notifications/categories/alerts'\nimport {notify} from 'src/shared/actions/notifications'\n\n// Types\nimport {NotificationAction} from 'src/types'\n\nexport const GET_FLUX_DOCS = 'GET_FLUX_DOCS'\n\nexport type Action = ReturnType\n\nexport const setFluxFunc = (data: FluxdocsArray) => ({\n type: GET_FLUX_DOCS,\n payload: {\n data,\n },\n})\n\nexport const getFluxPackages =\n () => async (dispatch: Dispatch) => {\n try {\n const resp = await getFluxdocs({})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n dispatch(setFluxFunc(resp.data))\n } catch (error) {\n console.error(error)\n const message = get(error, 'response.data.message', '')\n dispatch(notify(getFluxPackagesFailed(message)))\n }\n }\n","// Libraries\nimport React, {FC, useEffect} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\n\n// Components\nimport {Dropdown} from '@influxdata/clockface'\n\n// Actions\nimport {checkBucketLimits} from 'src/cloud/actions/limits'\nimport {showOverlay, dismissOverlay} from 'src/overlays/actions/overlays'\n\n// Utils\nimport {getBucketLimitStatus} from 'src/cloud/utils/limits'\n\n// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Types\nimport {Bucket} from 'src/types'\n\ninterface Props {\n onUpdateBucket: (bucket: Bucket) => void\n testID: string\n}\n\nconst CreateBucketDropdownItem: FC = ({onUpdateBucket, testID}) => {\n const limitStatus = useSelector(getBucketLimitStatus)\n const dispatch = useDispatch()\n useEffect(() => {\n // Check bucket limits when component mounts\n dispatch(checkBucketLimits())\n }, [dispatch])\n\n const handleItemClick = (): void => {\n if (CLOUD && limitStatus === 'exceeded') {\n dispatch(showOverlay('asset-limit', {asset: 'Buckets'}, dismissOverlay))\n } else {\n dispatch(showOverlay('create-bucket', {onUpdateBucket}, dismissOverlay))\n }\n }\n\n return (\n \n + Create Bucket\n \n )\n}\n\nexport default CreateBucketDropdownItem\n","// Libraries\nimport React, {CSSProperties, FC, useContext, useEffect} from 'react'\n\n// Components\nimport {\n TechnoSpinner,\n ComponentSize,\n RemoteDataState,\n Dropdown,\n IconFont,\n} from '@influxdata/clockface'\nimport CreateBucketDropdownItem from 'src/flows/shared/BucketSelector/CreateBucketDropdownItem'\n\n// Contexts\nimport {BucketContext} from 'src/shared/contexts/buckets'\n\n// Types\nimport {Bucket} from 'src/types'\n\nconst REMAP_BUCKET_TYPES = {\n user: 'My Data',\n system: 'System Data',\n sample: 'Sample Data',\n}\n\ninterface Props {\n selected: Bucket\n onSelect: (bucket: Bucket) => void\n testID?: string\n style?: CSSProperties\n}\n\nconst BucketSelector: FC = ({\n selected,\n onSelect,\n testID = 'flow-bucket-selector',\n style = {},\n}) => {\n const {buckets, loading} = useContext(BucketContext)\n let buttonText = 'Loading buckets...'\n\n useEffect(() => {\n if (loading !== RemoteDataState.Done) {\n return\n }\n\n if (!selected || buckets.find(bucket => bucket.name === selected.name)) {\n return\n }\n\n onSelect(null)\n }, [buckets, onSelect])\n\n let menuItems = (\n \n \n \n )\n\n if (loading === RemoteDataState.Done && buckets.length) {\n const body = Object.entries(\n buckets.reduce((acc, curr) => {\n if (!acc[curr.type]) {\n acc[curr.type] = []\n }\n\n acc[curr.type].push(curr)\n return acc\n }, {}) as Record\n ).map(([k, v]) => {\n const items = v.map(bucket => (\n \n {bucket.name}\n \n ))\n\n let name = k\n\n if (REMAP_BUCKET_TYPES.hasOwnProperty(k)) {\n name = REMAP_BUCKET_TYPES[k]\n }\n\n return (\n \n \n {items}\n \n )\n })\n\n menuItems = (\n <>\n \n \n {body}\n \n )\n }\n\n if (loading === RemoteDataState.Done && !selected?.name) {\n buttonText = 'Choose a bucket'\n } else if (loading === RemoteDataState.Done && selected?.name) {\n buttonText = selected.name\n }\n\n const button = (active, onClick) => (\n \n {buttonText}\n \n )\n\n const menu = onCollapse => (\n {menuItems}\n )\n\n return \n}\n\nexport default BucketSelector\n","function prependZero(number) {\n if (number < 10) {\n return `0${number}`\n }\n return number\n}\n\n// The date parameter here is to help with testing so that we can easily mock a date\n// without having to worry about the overhead of testing time\nexport const setCloneName = (name: string, date?: Date): string => {\n const d = date ? date : new Date()\n const year = d.getUTCFullYear()\n const month = d.getUTCMonth() + 1\n const day = d.getUTCDate()\n const hour = d.getUTCHours()\n const minutes = d.getUTCMinutes()\n const seconds = d.getUTCSeconds()\n return `${name.trim()} (cloned at ${year}-${prependZero(month)}-${prependZero(\n day\n )} ${prependZero(hour)}:${prependZero(minutes)}:${prependZero(seconds)})`\n}\n","import React, {PureComponent, ReactElement} from 'react'\nimport ReactDOM from 'react-dom'\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\ninterface Props {\n children: ReactElement\n onClickOutside: (e) => void\n}\n\n@ErrorHandling\nexport class ClickOutside extends PureComponent {\n public componentDidMount() {\n document.addEventListener('mousedown', this.handleClickOutside, true)\n }\n\n public componentWillUnmount() {\n document.removeEventListener('mousedown', this.handleClickOutside, true)\n }\n\n public render() {\n return React.Children.only(this.props.children)\n }\n\n private handleClickOutside = e => {\n const domNode = ReactDOM.findDOMNode(this)\n if (!domNode || !domNode.contains(e.target)) {\n this.props.onClickOutside(e)\n }\n }\n}\n","import {FunctionComponent} from 'react'\nimport {activeFlags} from 'src/shared/selectors/flags'\nimport {clearOverrides, setOverride} from 'src/shared/actions/flags'\n\nimport {getStore} from 'src/store/configureStore'\n\nexport const isFlagEnabled = (flagName: string, equals?: string | boolean) => {\n let _equals = equals\n const flags = activeFlags(getStore().getState())\n\n if (_equals === undefined) {\n _equals = true\n }\n\n if (flags.hasOwnProperty(flagName)) {\n return flags[flagName] === _equals\n }\n\n return false\n}\n\nexport const getFlagValue = (flagName: string) => {\n const flags = activeFlags(getStore().getState())\n\n if (flags.hasOwnProperty(flagName)) {\n return flags[flagName]\n }\n\n return null\n}\n\n// type influx.toggle('myFlag') to disable / enable any feature flag\nexport const FeatureFlag: FunctionComponent<{\n name: string\n equals?: string | boolean\n}> = ({name, equals, children}) => {\n if (!isFlagEnabled(name, equals)) {\n return null\n }\n\n return children as any\n}\n\nexport const getUserFlags = () => activeFlags(getStore().getState())\n\nconst orderObject = unordered => {\n return Object.keys(unordered)\n .sort()\n .reduce((obj, key) => {\n obj[key] = unordered[key]\n return obj\n }, {})\n}\n\n/* eslint-disable no-console */\nconst list = () => {\n console.log('Currently Available Feature Flags')\n console.table(orderObject(getUserFlags()))\n}\n/* eslint-enable no-console */\n\nconst reset = () => {\n getStore().dispatch(clearOverrides())\n}\n\nexport const set = (flagName: string, value: string | boolean) => {\n getStore().dispatch(setOverride(flagName, value))\n}\n\nexport const toggle = (flagName: string): boolean => {\n const flags = getUserFlags()\n\n set(flagName, !flags[flagName])\n\n return !flags[flagName]\n}\n\n// Expose utility in dev tools console for convenience\nconst w: any = window\n\nw.influx = {toggle, list, reset, set}\n","export enum InjectionType {\n OnOwnLine = 'onOwnLine',\n SameLine = 'sameLine',\n}\n\nexport interface InjectionPosition {\n row: number\n column: number\n shouldStartWithNewLine: boolean\n shouldEndInNewLine: boolean\n}\n\nexport interface InjectionOptions {\n header?: string | null\n text: string\n type: InjectionType\n triggerSuggest?: boolean\n cbParentOnUpdateText: (t: string) => void\n}\n\nexport function calcInjectionPosition(\n editor,\n type: InjectionType\n): InjectionPosition {\n const {lineNumber, column: col} = editor.getPosition()\n let row = lineNumber\n let column = col\n\n const queryText = editor.getModel().getValue()\n const split = queryText.split('\\n')\n const getCurrentLineText = () => {\n // row is not zero indexed in monaco editor. 1..N\n return (split[row - 1] || split[split.length - 1]).trimEnd()\n }\n\n let currentLineText = getCurrentLineText()\n // column is not zero indexed in monnao editor. 1..N\n let textAheadOfCursor = currentLineText.slice(0, column - 1).trim()\n let textBehindCursor = currentLineText.slice(column - 1).trim()\n\n // if cursor has text in front of it, and should be onOwnRow\n if (type == InjectionType.OnOwnLine && textAheadOfCursor) {\n row++\n column = 1\n }\n // edge case for when user toggles to the script editor\n // this defaults the cursor to the initial position (top-left, 1:1 position)\n const [currentRange] = editor.getVisibleRanges()\n if (row === 1 && column === 1) {\n row = currentRange.endLineNumber + 1\n }\n\n if (row !== lineNumber) {\n currentLineText = getCurrentLineText()\n textAheadOfCursor = currentLineText.slice(0, column - 1).trim()\n textBehindCursor = currentLineText.slice(column - 1).trim()\n }\n\n let shouldEndInNewLine = false\n // if cursor has text behind it, and should be onOwnRow\n if (type == InjectionType.OnOwnLine && textBehindCursor) {\n shouldEndInNewLine = true\n }\n\n const cursorInMiddleOfText = textAheadOfCursor && textBehindCursor\n if (type == InjectionType.OnOwnLine && cursorInMiddleOfText) {\n row++\n shouldEndInNewLine = true\n }\n if (type == InjectionType.OnOwnLine) {\n column = 1\n }\n\n // if we asked to insert on a row out-of-range\n // then need to manually append newline to front of row\n const shouldStartWithNewLine = row > currentRange.endLineNumber\n\n return {row, column, shouldStartWithNewLine, shouldEndInNewLine}\n}\n\nexport const moveCursorAndTriggerSuggest = (\n editor,\n {row, column, shouldStartWithNewLine, shouldEndInNewLine},\n hasHeader,\n textLength\n) => {\n let columnOffset = 1\n if (shouldStartWithNewLine) {\n columnOffset++\n }\n if (shouldEndInNewLine) {\n columnOffset++\n }\n setTimeout(() => {\n editor.focus()\n editor.setPosition({\n lineNumber: hasHeader ? row + 1 : row,\n column: column + textLength - columnOffset,\n })\n editor.trigger('', 'editor.action.triggerSuggest', {})\n }, 0)\n}\n","import {FluxFunction} from 'src/types/shared'\nimport {CLOUD} from 'src/shared/constants'\nimport {FROM, UNION} from 'src/shared/constants/fluxFunctions'\n\nexport const isPipeTransformation = (func: FluxFunction) => {\n if (CLOUD) {\n return func.fluxType.startsWith('<-', 1)\n }\n return !['from', 'union'].includes(func.name)\n}\n\nexport const functionRequiresNewLine = (funcName: string): boolean => {\n switch (funcName) {\n case FROM.name:\n case UNION.name: {\n return true\n }\n default:\n return false\n }\n}\n","import React, {FC, createContext, useState, useCallback} from 'react'\nimport {EditorType, FluxFunction, FluxToolbarFunction} from 'src/types'\n\n// Helpers\nimport {\n InjectionType,\n InjectionOptions,\n calcInjectionPosition,\n moveCursorAndTriggerSuggest,\n} from 'src/shared/contexts/editor/injection'\nimport {generateImport} from 'src/shared/contexts/editor/insertFunction'\nimport {\n isPipeTransformation,\n functionRequiresNewLine,\n} from 'src/shared/utils/fluxFunctions'\nimport {getFluxExample} from 'src/shared/utils/fluxExample'\n\n// LSP\nimport {\n ExecuteCommand,\n ExecuteCommandArgument,\n} from 'src/languageSupport/languages/flux/lsp/utils'\nimport LspConnectionManager from 'src/languageSupport/languages/flux/lsp/connection'\n\n// Utils\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {CLOUD} from 'src/shared/constants'\n\nexport interface EditorContextType {\n editor: EditorType | null\n setEditor: (\n editor: EditorType,\n conn: React.MutableRefObject\n ) => void\n inject: (options: InjectionOptions) => void\n injectFunction: (fn, cbToParent) => void\n injectVariable: (variableName, cbToParent) => void\n injectViaLsp: (\n cmd: ExecuteCommand,\n data: Omit\n ) => void\n}\n\nconst DEFAULT_CONTEXT: EditorContextType = {\n editor: null,\n setEditor: _ => {},\n inject: _ => {},\n injectFunction: (_, __) => {},\n injectVariable: (_, __) => {},\n injectViaLsp: (_, __) => {},\n}\n\nexport const EditorContext = createContext(DEFAULT_CONTEXT)\n\nexport const EditorProvider: FC = ({children}) => {\n const [editor, setEditorOnState] = useState(null)\n const [connection, setConnection] =\n useState>(null)\n\n const setEditor = (ed, conn) => {\n setEditorOnState(ed)\n setConnection(conn)\n }\n\n const injectViaLsp = useCallback(\n (cmd, data: Omit) => {\n try {\n if (connection?.current && !isFlagEnabled('schemaComposition')) {\n connection.current.inject(cmd, data)\n }\n } catch (e) {\n console.error(e)\n }\n },\n [editor, connection?.current]\n )\n\n const inject = useCallback(\n (options: InjectionOptions) => {\n if (!editor) {\n return {}\n }\n\n const {\n header,\n text: initT,\n type,\n triggerSuggest,\n cbParentOnUpdateText,\n } = options\n const injectionPosition = calcInjectionPosition(editor, type)\n const {\n row,\n column: initC,\n shouldStartWithNewLine,\n shouldEndInNewLine,\n } = injectionPosition\n\n let text = initT.trimRight()\n if (shouldStartWithNewLine) {\n text = `\\n${text}`\n }\n if (shouldEndInNewLine) {\n text = `${text}\\n`\n }\n\n const column = type == InjectionType.OnOwnLine ? 1 : initC\n const range = new monaco.Range(row, column, row, column)\n const edits = [\n {\n range,\n text,\n },\n ]\n\n const addHeader = header && !editor.getModel().getValue().includes(header)\n if (addHeader) {\n edits.unshift({\n range: new monaco.Range(1, 1, 1, 1),\n text: `${header}\\n`,\n })\n }\n\n editor.executeEdits('', edits)\n cbParentOnUpdateText(editor.getValue())\n\n if (triggerSuggest) {\n moveCursorAndTriggerSuggest(\n editor,\n injectionPosition,\n addHeader,\n text.length\n )\n }\n },\n [editor]\n )\n\n const injectFunction = useCallback(\n (\n rawFn: FluxToolbarFunction | FluxFunction,\n cbParentOnUpdateText: (t: string) => void\n ): void => {\n const fn = CLOUD\n ? getFluxExample(rawFn as FluxFunction)\n : (rawFn as FluxFunction)\n\n const text = isPipeTransformation(fn)\n ? ` |> ${fn.example.trimRight()}`\n : `${fn.example.trimRight()}`\n\n const header = generateImport(fn as FluxFunction, editor.getValue())\n\n const type =\n isPipeTransformation(fn) || functionRequiresNewLine(fn.name)\n ? InjectionType.OnOwnLine\n : InjectionType.SameLine\n\n const options = {\n text,\n type,\n header,\n triggerSuggest: true,\n cbParentOnUpdateText,\n }\n inject(options)\n },\n [inject, editor]\n )\n\n const injectVariable = useCallback(\n (variableName: string, cbToParent: (t: string) => void) => {\n if (!editor) {\n return null\n }\n\n const options = {\n text: `v.${variableName}`,\n type: InjectionType.SameLine,\n triggerSuggest: false,\n cbParentOnUpdateText: cbToParent,\n }\n inject(options)\n },\n [editor, inject]\n )\n\n return (\n \n {children}\n \n )\n}\n\nexport {\n InjectionType,\n InjectionOptions,\n calcInjectionPosition,\n moveCursorAndTriggerSuggest,\n}\n","// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Types\nimport {FluxFunction} from 'src/types/shared'\n\nexport const generateImport = (func: FluxFunction, script: string): string => {\n let importStatement = `import \"${func.package}\"`\n\n if (CLOUD) {\n // if package is nested, use func.path to import.\n if (func.path.includes('/')) {\n importStatement = `import \"${func.path}\"`\n }\n }\n\n if (\n !func.package ||\n func.package === 'universe' ||\n script.includes(importStatement)\n ) {\n return null\n }\n\n return importStatement\n}\n","// Libraries\nimport React, {FC, ReactNode} from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport remarkExternalLinks from 'remark-external-links'\n\nimport {CLOUD, MARKDOWN_UNSUPPORTED_IMAGE} from 'src/shared/constants/index'\n\ninterface Props {\n className?: string\n cloudRenderers?: ReactNode\n text: string\n escapeHtml?: boolean\n}\n\ninterface ImageProps {\n src?: string\n alt?: string\n}\n\n// In cloud environments, we want to render the literal markdown image tag\n// but ReactMarkdown expects a React element wrapping an image to be returned,\n// so we use any\n// see: https://github.com/rexxars/react-markdown/blob/master/index.d.ts#L101\nconst disallowedImageRenderer: any = (): any => MARKDOWN_UNSUPPORTED_IMAGE\n\n// In OSS we want to allow users to render images to external sources, requiring\n// this custom renderer. If you want to disallow these, remove this renderer or\n// change to the disallowedImageRenderer instead.\nconst allowedImageRenderer: FC = ({src, alt}) => {\n return (\n
\n {alt}\n
\n )\n}\n\nconst remarkPlugins = [remarkExternalLinks]\n\nexport const MarkdownRenderer: FC = ({className = '', text}) => {\n // don't parse images in cloud environments to prevent arbitrary script execution via images\n if (CLOUD) {\n return (\n \n {text}\n \n )\n }\n\n // load images locally to your heart's content. caveat emptor\n return (\n \n {text}\n \n )\n}\n","// Types\nimport {BuilderAggregateFunctionType, RemoteDataState} from 'src/types'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const setBuilderAggregateFunctionType = (\n builderAggregateFunctionType: BuilderAggregateFunctionType,\n index: number\n) => ({\n type: 'SET_BUILDER_AGGREGATE_FUNCTION_TYPE' as 'SET_BUILDER_AGGREGATE_FUNCTION_TYPE',\n payload: {builderAggregateFunctionType, index},\n})\n\nexport const setBuilderBucketsStatus = (bucketsStatus: RemoteDataState) => ({\n type: 'SET_BUILDER_BUCKETS_STATUS' as 'SET_BUILDER_BUCKETS_STATUS',\n payload: {bucketsStatus},\n})\n\nexport const setBuilderBuckets = (buckets: string[]) => ({\n type: 'SET_BUILDER_BUCKETS' as 'SET_BUILDER_BUCKETS',\n payload: {buckets},\n})\n\nexport const setBuilderBucket = (bucket: string, resetSelections: boolean) => ({\n type: 'SET_BUILDER_BUCKET_SELECTION' as 'SET_BUILDER_BUCKET_SELECTION',\n payload: {bucket, resetSelections},\n})\n\nexport const setBuilderTagsStatus = (status: RemoteDataState) => ({\n type: 'SET_BUILDER_TAGS_STATUS' as 'SET_BUILDER_TAGS_STATUS',\n payload: {status},\n})\n\nexport const setBuilderTagKeys = (index: number, keys: string[]) => ({\n type: 'SET_BUILDER_TAG_KEYS' as 'SET_BUILDER_TAG_KEYS',\n payload: {index, keys},\n})\n\nexport const setBuilderTagKeysStatus = (\n index: number,\n status: RemoteDataState\n) => ({\n type: 'SET_BUILDER_TAG_KEYS_STATUS' as 'SET_BUILDER_TAG_KEYS_STATUS',\n payload: {index, status},\n})\n\nexport const setBuilderTagValues = (index: number, values: string[]) => ({\n type: 'SET_BUILDER_TAG_VALUES' as 'SET_BUILDER_TAG_VALUES',\n payload: {index, values},\n})\n\nexport const setBuilderTagValuesStatus = (\n index: number,\n status: RemoteDataState\n) => ({\n type: 'SET_BUILDER_TAG_VALUES_STATUS' as 'SET_BUILDER_TAG_VALUES_STATUS',\n payload: {index, status},\n})\n\nexport const setBuilderTagKeySelection = (index: number, key: string) => ({\n type: 'SET_BUILDER_TAG_KEY_SELECTION' as 'SET_BUILDER_TAG_KEY_SELECTION',\n payload: {index, key},\n})\n\nexport const setBuilderTagValuesSelection = (\n index: number,\n values: string[]\n) => ({\n type: 'SET_BUILDER_TAG_VALUES_SELECTION' as 'SET_BUILDER_TAG_VALUES_SELECTION',\n payload: {index, values},\n})\n\nexport const addTagSelectorSync = () => ({\n type: 'ADD_TAG_SELECTOR' as 'ADD_TAG_SELECTOR',\n})\n\nexport const removeTagSelectorSync = (index: number) => ({\n type: 'REMOVE_TAG_SELECTOR' as 'REMOVE_TAG_SELECTOR',\n payload: {index},\n})\n\nexport const setFunctions = (functions: string[]) => ({\n type: 'SELECT_BUILDER_FUNCTION' as 'SELECT_BUILDER_FUNCTION',\n payload: {functions},\n})\n\nexport const setAggregateWindow = (period: string) => ({\n type: 'SET_AGGREGATE_WINDOW' as 'SET_AGGREGATE_WINDOW',\n payload: {period},\n})\n\nexport const setAggregateFillValues = (fillValues: boolean) => ({\n type: 'SET_AGGREGATE_FILL_VALUES' as 'SET_AGGREGATE_FILL_VALUES',\n payload: {fillValues},\n})\n\nexport const setValuesSearchTerm = (index: number, searchTerm: string) => ({\n type: 'SET_BUILDER_VALUES_SEARCH_TERM' as 'SET_BUILDER_VALUES_SEARCH_TERM',\n payload: {index, searchTerm},\n})\n\nexport const setKeysSearchTerm = (index: number, searchTerm: string) => ({\n type: 'SET_BUILDER_KEYS_SEARCH_TERM' as 'SET_BUILDER_KEYS_SEARCH_TERM',\n payload: {index, searchTerm},\n})\n","import {Notification} from 'src/types'\n\nexport type Action =\n | PublishNotificationAction\n | DismissNotificationAction\n | DismissAllNotificationsAction\n\nexport interface PublishNotificationAction {\n type: 'PUBLISH_NOTIFICATION'\n payload: {\n notification: Notification\n }\n}\nexport const notify = (\n notification: Notification\n): PublishNotificationAction => ({\n type: 'PUBLISH_NOTIFICATION',\n payload: {notification},\n})\n\nexport interface DismissNotificationAction {\n type: 'DISMISS_NOTIFICATION'\n payload: {\n id: string\n }\n}\nexport const dismissNotification = (id: string): DismissNotificationAction => ({\n type: 'DISMISS_NOTIFICATION',\n payload: {id},\n})\n\nexport interface DismissAllNotificationsAction {\n type: 'DISMISS_ALL_NOTIFICATIONS'\n}\nexport const dismissAllNotifications = (): DismissAllNotificationsAction => ({\n type: 'DISMISS_ALL_NOTIFICATIONS',\n})\n","import {TelegrafPlugin as GenTelegrafPlugin} from 'src/client'\n\nexport interface Plugin extends Omit {\n config?: any\n}\n\nexport enum CollectorsStep {\n 'Select',\n 'Configure',\n 'Verify',\n}\n\nexport enum PluginConfigurationStep {\n 'Configure',\n 'Customize',\n 'Verify',\n}\n\ninterface ScraperTarget {\n bucket: string\n url: string\n name: string\n id?: string\n}\n\nexport interface DataLoadersState {\n locationOnDismiss: string\n pluginBundles: BundleName[]\n scraperTarget: ScraperTarget\n telegrafConfigDescription: string\n telegrafConfigID: string\n telegrafConfigName: string\n telegrafPlugins: TelegrafPlugin[]\n token: string\n type: DataLoaderType\n}\n\nexport enum ConfigurationState {\n Unconfigured = 'unconfigured',\n InvalidConfiguration = 'invalid',\n Configured = 'configured',\n}\n\nexport enum DataLoaderType {\n CSV = 'CSV',\n Streaming = 'Streaming',\n ClientLibrary = 'Client Library',\n Scraping = 'Scraping',\n Empty = '',\n}\n\nexport interface TelegrafPlugin extends GenTelegrafPlugin {\n name: TelegrafPluginName\n configured: ConfigurationState\n active: boolean\n plugin?: Plugin\n templateID?: string\n}\n\nexport enum BundleName {\n System = 'System',\n Docker = 'Docker',\n Kubernetes = 'Kubernetes',\n Nginx = 'NGINX',\n Redis = 'Redis',\n}\n\nexport type TelegrafPluginName = string\n\nexport enum Precision {\n Milliseconds = 'Milliseconds',\n Seconds = 'Seconds',\n Microseconds = 'Microseconds',\n Nanoseconds = 'Nanoseconds',\n}\n\nexport enum ConfigFieldType {\n String = 'string',\n StringArray = 'string array',\n Uri = 'uri',\n UriArray = 'uri array',\n}\n\nexport interface ConfigFields {\n [field: string]: {\n type: ConfigFieldType\n isRequired: boolean\n }\n}\n\nexport interface TelegrafPluginInfo {\n [name: string]: {\n fields: ConfigFields\n defaults: Plugin\n templateID?: string\n }\n}\n\nexport type Substep = number | 'streaming' | 'config'\n","import {ErrorInfo} from 'react'\nimport HoneyBadger from 'honeybadger-js'\nimport {\n CLOUD,\n GIT_SHA,\n HONEYBADGER_KEY,\n HONEYBADGER_ENV,\n} from 'src/shared/constants'\n\nimport {getUserFlags} from 'src/shared/utils/featureFlag'\nimport {event} from 'src/cloud/utils/reporting'\n\nif (CLOUD) {\n HoneyBadger.configure({\n apiKey: HONEYBADGER_KEY,\n revision: GIT_SHA,\n environment: HONEYBADGER_ENV,\n })\n}\n\n// See https://docs.honeybadger.io/lib/javascript/guides/reporting-errors.html#additional-options\ninterface HoneyBadgerAdditionalOptions {\n component?: string\n context?: {[key: string]: any}\n cookies?: {[key: string]: any}\n name?: string\n params?: {[key: string]: any}\n}\n\nexport const reportErrorThroughHoneyBadger = (\n error: Error,\n additionalOptions?: HoneyBadgerAdditionalOptions\n): void => {\n let additionalContext = {}\n if (additionalOptions && additionalOptions.context) {\n additionalContext = {...additionalOptions.context}\n }\n\n const context = {\n ...additionalContext,\n ...getUserFlags(),\n }\n\n let options: HoneyBadgerAdditionalOptions = {}\n if (additionalOptions) {\n options = {...additionalOptions}\n\n delete options.context // already included in the above context object\n }\n\n if (CLOUD) {\n HoneyBadger.notify(error, {context, ...options})\n\n let errorType = 'generic (untagged) error'\n if (options.name) {\n errorType = options.name\n } else if (options.component) {\n errorType = options.component\n }\n\n event('ui error', {error: errorType}, {errorCount: 1})\n } else {\n console.error(error)\n }\n}\n\n/*\n Parse React's error boundary info message to provide the name of the\n component an error occured in.\n\n For example, given the following info message:\n\n The above error occurred in the component:\n in MePage (created by ErrorBoundary(MePage))\n in ErrorBoundary (created by ErrorBoundary(MePage))\n in ErrorBoundary(MePage) (created by Connect(ErrorBoundary(MePage)))\n in Connect(ErrorBoundary(MePage)) (created by RouterContext)\n in SpinnerContainer (created by SetOrg)\n ...\n\n We will extract \"MePage\" as the component name.\n*/\nexport const parseComponentName = (errorInfo: ErrorInfo): string => {\n const componentName = errorInfo.componentStack\n .trim()\n .split('\\n')\n .map(s => s.split(' ')[1])[0]\n\n return componentName\n}\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".logo-with-cubo{display:flex}.logo-with-cubo>.cubo-logo{font-size:var(--step-4);padding-right:8px;color:#fff;line-height:1.5}.logo-with-cubo>.influx-cloud-logo{width:150px;height:50px;display:flex}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Libraries\nimport {schema} from 'normalizr'\nimport {omit} from 'lodash'\n\n// Types\nimport {Cell, Dashboard, RemoteDataState, ResourceType, View} from 'src/types'\nimport {CellsWithViewProperties} from 'src/client'\n\n// Utils\nimport {defaultView} from 'src/views/helpers'\nimport {arrayOfLabels} from './labels'\n\n/* Views */\n\n// Defines the schema for the \"views\" resource\nexport const viewsFromCells = (\n cells: CellsWithViewProperties,\n dashboardID: string\n): View[] => {\n return cells.map(cell => {\n const {properties, id, name} = cell\n\n return {\n id,\n ...defaultView(name),\n cellID: id,\n properties,\n dashboardID,\n }\n })\n}\n\nexport const viewSchema = new schema.Entity(ResourceType.Views)\nexport const arrayOfViews = [viewSchema]\n\n/* Cells */\n\n// Defines the schema for the \"cells\" resource\nexport const cellSchema = new schema.Entity(\n ResourceType.Cells,\n {},\n {\n processStrategy: (cell: Cell, parent: Dashboard) => {\n return {\n ...omit(cell, 'properties'),\n dashboardID: cell.dashboardID ? cell.dashboardID : parent.id,\n status: RemoteDataState.Done,\n }\n },\n }\n)\nexport const arrayOfCells = [cellSchema]\n\n/* Dashboards */\n\n// Defines the schema for the \"dashboards\" resource\nexport const dashboardSchema = new schema.Entity(\n ResourceType.Dashboards,\n {\n labels: arrayOfLabels,\n cells: arrayOfCells,\n views: arrayOfViews,\n },\n {\n processStrategy: (dashboard: Dashboard) => addDashboardDefaults(dashboard),\n }\n)\nexport const arrayOfDashboards = [dashboardSchema]\n\nexport const addDashboardDefaults = (dashboard: Dashboard): Dashboard => {\n return {\n ...dashboard,\n id: dashboard.id || '',\n name: dashboard.name || '',\n orgID: dashboard.orgID || '',\n meta: addDashboardMetaDefaults(dashboard.meta),\n status: RemoteDataState.Done,\n }\n}\n\nconst addDashboardMetaDefaults = (meta: Dashboard['meta']) => {\n if (!meta) {\n return {}\n }\n\n if (!meta.updatedAt) {\n return {...meta, updatedAt: new Date().toDateString()}\n }\n\n return meta\n}\n","var map = {\n\t\"./Columns/index.tsx\": 2993,\n\t\"./Downsample/index.ts\": 2994,\n\t\"./Markdown/index.ts\": 2980,\n\t\"./MetricSelector/index.ts\": 2930,\n\t\"./Missing/index.ts\": 2997,\n\t\"./Notification/index.ts\": 2938,\n\t\"./QueryBuilder/index.ts\": 2931,\n\t\"./RawFluxEditor/index.ts\": 2981,\n\t\"./Region/index.ts\": 2995,\n\t\"./RemoteCSV/index.ts\": 2998,\n\t\"./Schedule/index.ts\": 2982,\n\t\"./Spotify/index.ts\": 2983,\n\t\"./Table/index.ts\": 2999,\n\t\"./Time/index.ts\": 3000,\n\t\"./ToBucket/index.ts\": 3001,\n\t\"./Visualization/index.ts\": 2939,\n\t\"./Youtube/index.ts\": 3002\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1831;","var map = {\n\t\"./blank.ts\": 1833,\n\t\"./bucket.ts\": 1834,\n\t\"./dashboard.ts\": 1835,\n\t\"./default.ts\": 1836,\n\t\"./downsample.ts\": 1837,\n\t\"./flow.ts\": 1838,\n\t\"./flux.ts\": 1839,\n\t\"./intro.ts\": 1840,\n\t\"./notification.ts\": 1841,\n\t\"./share.ts\": 1842,\n\t\"./subscription.ts\": 1843,\n\t\"./task.ts\": 1844,\n\t\"./tools.ts\": 1845\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1832;","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\n\nexport default register =>\n register({\n type: 'blank',\n init: () =>\n Promise.resolve({\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [],\n },\n }),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {PIPE_DEFINITIONS} from 'src/flows'\nimport {getBucket, getBuckets, Buckets} from 'src/client'\n\nexport default register =>\n register({\n type: 'bucket',\n init: (name: string, bucketID: string | undefined) =>\n getBucket({bucketID})\n .then(res => {\n if (res.status == 200) {\n return Promise.resolve({\n ...res,\n data: {buckets: [res.data]} as Buckets,\n })\n }\n return getBuckets({query: {name}})\n })\n .then(res => {\n // handle both get request payloads\n const data = (res.data as Buckets).buckets\n const name =\n res.status == 200\n ? `Explore the ${data[0].name} bucket`\n : `Select a bucket`\n const buckets = res.status == 200 ? data : []\n return Promise.resolve({\n name,\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n type: 'queryBuilder',\n title: 'Build a Query',\n visible: true,\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['queryBuilder'].initial)\n ),\n buckets,\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n {\n title: 'Visualize the Result',\n visible: true,\n type: 'visualization',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['visualization'].initial)\n ),\n },\n ],\n },\n })\n }),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\n\nexport default register =>\n register({\n type: 'dashboard',\n init: id =>\n fetch(`/api/v2/dashboards/${id}`)\n .then(res => res.json())\n .then(res => {\n return Promise.all(\n res.cells.map(c => {\n return fetch(c.links.view)\n .then(res => res.json())\n .then(res => {\n if (res.properties.type === 'markdown') {\n return [\n {\n title: 'Note',\n visible: true,\n type: 'markdown',\n text: res.properties.note,\n mode: 'preview',\n layout: {\n x: c.x,\n y: c.y,\n w: c.w,\n h: c.h,\n },\n },\n ]\n }\n\n const queries = res.properties.queries\n delete res.properties.queries\n\n return [\n {\n activeQuery: 0,\n queries,\n type: 'rawFluxEditor',\n title: `${res.name} - Query`,\n visible: true,\n },\n {\n title: res.name,\n visible: true,\n type: 'visualization',\n properties: res.properties,\n layout: {\n x: c.x,\n y: c.y,\n w: c.w,\n h: c.h,\n },\n },\n ]\n })\n })\n ).then(pipes => {\n const out = {\n name: res.name,\n spec: {\n readOnly: true,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: pipes.reduce((acc: any[], curr: any[]) => {\n return acc.concat(curr)\n }, []),\n },\n }\n\n return out\n })\n\n return res\n }),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {PIPE_DEFINITIONS} from 'src/flows'\n\nexport default register =>\n register({\n type: 'default',\n init: () =>\n Promise.resolve({\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n title: 'Build a Query',\n visible: true,\n type: 'queryBuilder',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['queryBuilder'].initial)\n ),\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n {\n title: 'Visualize the Result',\n visible: true,\n type: 'visualization',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['visualization'].initial)\n ),\n },\n ],\n },\n }),\n })\n","export default register =>\n register({\n type: 'downsample',\n })\n","export default register =>\n register({\n type: 'id',\n init: id => fetch(`/api/v2private/notebooks/${id}`).then(res => res.json()),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\n\nexport default register =>\n register({\n type: 'flux',\n init: () =>\n Promise.resolve({\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n activeQuery: 0,\n queries: [\n {\n text: '// Uncomment the following line to continue building from the previous cell\\n// __PREVIOUS_RESULT__\\n',\n editMode: 'advanced',\n builderConfig: {\n buckets: [],\n tags: [],\n functions: [],\n },\n },\n ],\n type: 'rawFluxEditor',\n title: 'Query to Run',\n visible: true,\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n ],\n },\n }),\n })\n","// Libraries\nimport {omit} from 'lodash'\nimport {nanoid} from 'nanoid'\n\n// Types\nimport {\n StatusRuleDraft,\n SlackNotificationRuleBase,\n SMTPNotificationRuleBase,\n PagerDutyNotificationRuleBase,\n TelegramNotificationRuleBase,\n NotificationEndpoint,\n NotificationRuleDraft,\n HTTPNotificationRuleBase,\n RuleStatusLevel,\n PostNotificationRule,\n GenRule,\n} from 'src/types'\nimport {RemoteDataState} from '@influxdata/clockface'\n\ntype RuleVariantFields =\n | SlackNotificationRuleBase\n | SMTPNotificationRuleBase\n | PagerDutyNotificationRuleBase\n | HTTPNotificationRuleBase\n | TelegramNotificationRuleBase\n\nconst defaultMessage =\n 'Notification Rule: ${ r._notification_rule_name } triggered by check: ${ r._check_name }: ${ r._message }'\n\nexport const getRuleVariantDefaults = (\n endpoints: NotificationEndpoint[],\n id: string\n): RuleVariantFields => {\n const endpoint = endpoints.find(e => e.id === id)\n\n switch (endpoint.type) {\n case 'slack': {\n return {messageTemplate: defaultMessage, channel: '', type: 'slack'}\n }\n\n case 'pagerduty': {\n return {messageTemplate: defaultMessage, type: 'pagerduty'}\n }\n\n case 'http': {\n return {type: 'http', url: ''}\n }\n\n case 'telegram': {\n // wrap all variable values into `` to prevent telegram's markdown errors\n const messageTemplate = defaultMessage.replace(\n /\\$\\{[^\\}]+\\}/g,\n x => `\\`${x}\\``\n )\n return {\n messageTemplate: messageTemplate,\n parseMode: 'MarkdownV2',\n disableWebPagePreview: false,\n type: 'telegram',\n }\n }\n\n default: {\n throw new Error(`Could not find NotificationEndpoint with id \"${id}\"`)\n }\n }\n}\n\ntype Change = 'changes from' | 'is equal to'\nexport const CHANGES: Change[] = ['changes from', 'is equal to']\n\nexport const activeChange = (status: StatusRuleDraft) => {\n const {previousLevel} = status.value\n\n if (!!previousLevel) {\n return 'changes from'\n }\n return 'is equal to'\n}\n\nexport const previousLevel = 'OK' as RuleStatusLevel\n\nexport const changeStatusRule = (\n status: StatusRuleDraft,\n changeType: Change\n): StatusRuleDraft => {\n if (changeType === 'is equal to') {\n return omit(status, 'value.previousLevel') as StatusRuleDraft\n }\n\n const {value} = status\n const newValue = {...value, previousLevel}\n\n return {...status, value: newValue}\n}\n\nexport const initRuleDraft = (orgID: string): NotificationRuleDraft => ({\n type: 'http',\n every: '10m',\n offset: '0s',\n url: '',\n orgID,\n name: '',\n activeStatus: 'active',\n status: RemoteDataState.NotStarted,\n endpointID: '',\n tagRules: [],\n labels: [],\n statusRules: [\n {\n cid: nanoid(),\n value: {\n currentLevel: 'CRIT',\n period: '1h',\n count: 1,\n },\n },\n ],\n description: '',\n})\n\n// Prepare a newly created rule for persistence\nexport const draftRuleToPostRule = (\n draftRule: NotificationRuleDraft\n): PostNotificationRule => {\n return {\n ...draftRule,\n status: draftRule.activeStatus,\n statusRules: draftRule.statusRules.map(r => r.value),\n tagRules: draftRule.tagRules\n .map(r => r.value)\n .filter(tr => tr.key && tr.value),\n } as PostNotificationRule\n}\n\nexport const newTagRuleDraft = () => ({\n cid: nanoid(),\n value: {\n key: '',\n value: '',\n operator: 'equal' as 'equal',\n },\n})\n\n// Prepare a persisted rule for editing\nexport const ruleToDraftRule = (rule: GenRule): NotificationRuleDraft => {\n const statusRules = rule.statusRules || []\n const tagRules = rule.tagRules || []\n return {\n ...rule,\n labels: rule.labels.map(l => l.id),\n status: RemoteDataState.Done,\n activeStatus: rule.status,\n offset: rule.offset || '',\n statusRules: statusRules.map(value => ({cid: nanoid(), value})),\n tagRules: tagRules.map(value => ({cid: nanoid(), value})),\n }\n}\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\n\nexport default register =>\n register({\n type: 'intro',\n init: () =>\n Promise.resolve({\n name: 'Welcome to Notebooks',\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n title: 'Welcome',\n visible: true,\n type: 'youtube',\n uri: 'Rs16uhxK0h8',\n },\n ],\n },\n }),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {PIPE_DEFINITIONS} from 'src/flows'\n\nexport default register =>\n register({\n type: 'notification',\n init: () =>\n Promise.resolve({\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n title: 'Build a Query',\n visible: true,\n type: 'queryBuilder',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['queryBuilder'].initial)\n ),\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n {\n title: 'Visualize the Result',\n visible: true,\n type: 'visualization',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['visualization'].initial)\n ),\n },\n {\n type: 'notification',\n visible: true,\n title: 'New Alert',\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['notification'].initial)\n ),\n },\n ],\n },\n }),\n })\n","export default register =>\n register({\n type: 'share',\n init: accessID =>\n fetch(`/api/share/${accessID}`)\n .then(res => res.json())\n .then(res => {\n delete res.id\n res.spec.pipes.forEach(p => delete p.id)\n\n return res\n }),\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {PIPE_DEFINITIONS} from 'src/flows'\nimport {getBuckets} from 'src/client'\nimport {getByIDAPI, updateAPI} from 'src/writeData/subscriptions/context/api'\nimport {Subscription} from 'src/types'\n\nconst getSubscriptionMeasurementValues = (sub: Subscription): string[] => {\n if (sub.dataFormat === 'json') {\n return sub.jsonMeasurementKey.name ? [sub.jsonMeasurementKey.name] : []\n } else if (sub.dataFormat === 'string') {\n return sub.stringMeasurement.name ? [sub.stringMeasurement.name] : []\n } else {\n return []\n }\n}\n\nexport default register =>\n register({\n type: 'subscription',\n callback: (subscriptionID: string, notebookID: string) =>\n updateAPI({id: subscriptionID, data: {notebookID}}),\n init: async (subscriptionID: string) => {\n let sub\n let buckets\n try {\n sub = await getByIDAPI({id: subscriptionID})\n const bucketsResp = await getBuckets({query: {orgID: sub.orgID}})\n buckets = bucketsResp.status === 200 ? bucketsResp.data.buckets : []\n } catch {\n sub = {}\n buckets = []\n }\n const name = `${sub.name} Subscription`\n return {\n name,\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n type: 'queryBuilder',\n title: `Query ${sub.bucket} Bucket`,\n visible: true,\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['queryBuilder'].initial)\n ),\n buckets: buckets.filter(a => a.name === sub.bucket),\n tags: [\n {\n key: '_measurement',\n values: getSubscriptionMeasurementValues(sub),\n aggregateFunctionType: 'filter',\n },\n ],\n },\n {\n title: `Subscription ${sub.name} Data`,\n visible: true,\n type: 'table',\n },\n {\n type: 'queryBuilder',\n title: 'Query _monitoring Bucket',\n visible: true,\n ...JSON.parse(\n JSON.stringify(PIPE_DEFINITIONS['queryBuilder'].initial)\n ),\n buckets: buckets.filter(a => a.name === '_monitoring'),\n tags: [\n {\n key: '_measurement',\n values: ['subscriptions'],\n aggregateFunctionType: 'filter',\n },\n ],\n },\n {\n title: 'Subscriptions Error Data',\n visible: true,\n type: 'table',\n },\n ],\n },\n }\n },\n })\n","import {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\nimport {remove} from 'src/shared/contexts/query'\n\nexport default register =>\n register({\n type: 'task',\n init: id => {\n if (!id) {\n return Promise.resolve({\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n type: 'queryBuilder',\n title: 'Query to Run',\n visible: true,\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n {\n type: 'schedule',\n title: 'Schedule as a Task',\n visible: true,\n },\n ],\n },\n })\n }\n\n return fetch(`/api/v2/tasks/${id}`)\n .then(resp => resp.json())\n .then(resp => {\n const ast = parse(resp.flux)\n const taskParams = remove(\n ast,\n node =>\n node.type === 'OptionStatement' &&\n node.assignment.id.name === 'task'\n )\n .reverse()\n .reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce(\n (_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n },\n acc\n )\n\n return acc\n }, {})\n\n return {\n name: resp.name,\n spec: {\n readOnly: false,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n pipes: [\n {\n activeQuery: 0,\n queries: [\n {\n text: format_from_js_file(ast),\n editMode: 'advanced',\n builderConfig: {\n buckets: [],\n tags: [],\n functions: [],\n },\n },\n ],\n type: 'rawFluxEditor',\n title: 'Query to Run',\n visible: true,\n },\n {\n title: 'Validate the Data',\n visible: true,\n type: 'table',\n },\n {\n type: 'schedule',\n title: 'Schedule as a Task',\n visible: true,\n interval:\n taskParams.every ||\n taskParams.cron.replace(/(^\")|(\"$)/g, ''),\n offset: taskParams.offset,\n task: {\n id,\n name: resp.name,\n flux: resp.flux,\n },\n },\n ],\n },\n }\n })\n },\n })\n","export default register =>\n register({\n type: 'tools',\n init: (id, token) => {\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept-Encoding': 'gzip',\n Authorization: `Token ${token}`,\n }\n\n return fetch(\n `https://influxdb.aws.influxdata.io/api/v2private/notebooks/${id}`,\n {\n method: 'GET',\n headers,\n }\n )\n .then(res => res.json())\n .then(res => {\n delete res.id\n delete res.orgID\n res.spec.pipes.unshift({\n type: 'region',\n region: 'https://influxdb.aws.influxdata.io',\n token,\n source: 'custom',\n visible: true,\n title: 'Tools Cluster',\n })\n\n return res\n })\n },\n })\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-columns{width:100%;display:grid;grid-template-columns:repeat(6, minmax(100px, 1fr));grid-gap:4px;height:auto;background-color:#07070e;padding:4px}.flow-columns--column{display:flex;padding:16px;background:#1a1a2a;border-radius:4px;align-items:center}.flow-columns--toggle{flex:0;margin-right:12px}.flow-columns--text{font-size:14px;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:600}.flow-columns--input{flex:1 1;font-size:14px;font-weight:600;user-select:none;color:#d5d5dd;height:40px;position:relative}.flow-columns--input input{background-color:rgba(0,0,0,0);border:2px solid #1a1a2a;color:#d5d5dd;font-size:14px;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:600;transition:color .25s ease,background-color .25s ease,border-color .25s ease,box-shadow .25s ease;outline:none;width:100%;height:40px;border-radius:2px}.flow-columns--input input:hover{border-color:#333346}.flow-columns--input input:hover,.flow-columns--input input:focus{color:#fff}.flow-columns--input input:focus{background-color:rgba(241,241,243,.15);border-color:rgba(0,163,255,.75);box-shadow:none}.flow-columns--input:hover .flow-panel--title-icon{opacity:1}.column-card--content{box-shadow:none;height:45px}.column-card--content>div{flex-direction:row;align-items:center;justify-content:flex-start;width:100%}.column-card--name>span{color:#d3d3d3;font-size:14px}.column-card--name{flex:1}.column-card--vistoggle{flex:0;margin-right:12px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".downsample-panel{display:flex;margin:0 -8px;padding-bottom:16px}.downsample-panel .duration-input{width:200px;margin-bottom:8px}.downsample-panel .downsample-panel--left{padding:0 8px}.downsample-panel .downsample-panel--right{padding:0 8px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-panel--markdown{font-size:14px;line-height:16px;padding:8px;border-radius:1px;transition:border-color .25s ease}.flow-panel--body .markdown-editor--monaco{position:relative}.flow-panel--body .markdown-editor--monaco .react-monaco-editor-container{min-height:100px}.flow-panel--markdown__placeholder.markdown-format{color:#68687b;font-style:italic}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".data-source{display:flex;height:100%;flex-direction:column}.data-source--controls{display:flex;align-items:flex-start;margin-bottom:8px;flex-wrap:wrap;flex:0 0 0}.data-source--search{flex:0 0 0}.data-source--bucket{flex:1 0 0;order:1}.data-source--aggregate{order:2}.data-source--filters{order:3;flex:1 0 100%;margin-top:4px;display:flex;align-items:center}.data-source--filters-label{height:40px;line-height:40px;font-weight:600;margin:0;margin-right:8px}.data-source--filter{margin:2px}.data-source--filter>.cf-label--name{max-width:50vw;overflow:hidden;text-overflow:ellipsis}.data-source--filters-list{display:flex;flex-wrap:wrap;flex:1 0 0}.data-source--block{display:block;flex-direction:column;align-items:stretch;width:100%}.data-source--block-results{display:flex;align-items:stretch;flex:1 1 0}.data-source--block-results .cf-dapper-scrollbars{height:100% !important}.data-source--block-title{font-size:14px;user-select:none;font-weight:600;padding-bottom:8px;margin-bottom:8px;color:#b9b9c5;border-bottom:2px solid #1a1a2a;text-transform:capitalize}.data-source--list__empty{display:flex;align-items:center;justify-content:center;user-select:none;color:#68687b;height:304px}.data-source--list__no-results{color:#68687b;justify-content:center;background-color:#07070e;border-radius:2px}.data-source--list__no-results>*{margin:4px}.selectors--item-value{transition:color .25s ease;font-family:\\\"Roboto Mono\\\",monospace}.selectors--item-name{margin:0 8px}.selectors--item-type{font-size:.75em;text-transform:uppercase;opacity:.666}.selectors--item__measurement{color:hotpink}.cf-list-item:hover .selectors--item__measurement{color:#ffb6c1}.selectors--item__field{color:#6495ed}.cf-list-item:hover .selectors--item__field{color:#87cefa}.selectors--item__tag{color:#32cd32}.cf-list-item:hover .selectors--item__tag{color:#7cfc00}.data-source--agg-info{font-size:13px;padding:8px;user-select:none;color:#b9b9c5;cursor:default}.data-source--agg-info>p{margin:0}.data-source--agg-info .cf-icon{display:inline-block;margin-right:4px;line-height:1em}@media screen and (min-width: 1200px){.data-source--controls{flex-wrap:nowrap}.data-source--bucket{flex:initial}.data-source--filters-label{margin-left:8px}.data-source--aggregate{order:3}.data-source--filters{order:2;flex:1 0 100px;margin-top:0;margin-right:4px}}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import {nanoid} from 'nanoid'\n\nconst COLOR_TYPE_SCALE = 'scale'\n\n// Color Palettes\nexport const LINE_COLORS_A = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#31C0F6',\n id: nanoid(),\n name: 'Nineteen Eighty Four',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#A500A5',\n id: nanoid(),\n name: 'Nineteen Eighty Four',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FF7E27',\n id: nanoid(),\n name: 'Nineteen Eighty Four',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_B = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#74D495',\n id: nanoid(),\n name: 'Atlantis',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#3F3FBA',\n id: nanoid(),\n name: 'Atlantis',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FF4D9E',\n id: nanoid(),\n name: 'Atlantis',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_C = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#8F8AF4',\n id: nanoid(),\n name: 'Do Androids Dream of Electric Sheep?',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#A51414',\n id: nanoid(),\n name: 'Do Androids Dream of Electric Sheep?',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#F4CF31',\n id: nanoid(),\n name: 'Do Androids Dream of Electric Sheep?',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_D = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FD7A5D',\n id: nanoid(),\n name: 'Delorean',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#5F1CF2',\n id: nanoid(),\n name: 'Delorean',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#4CE09A',\n id: nanoid(),\n name: 'Delorean',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_E = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FDC44F',\n id: nanoid(),\n name: 'Cthulhu',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#007C76',\n id: nanoid(),\n name: 'Cthulhu',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#8983FF',\n id: nanoid(),\n name: 'Cthulhu',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_F = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#DA6FF1',\n id: nanoid(),\n name: 'Ectoplasm',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#00717A',\n id: nanoid(),\n name: 'Ectoplasm',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#ACFF76',\n id: nanoid(),\n name: 'Ectoplasm',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_G = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#F6F6F8',\n id: nanoid(),\n name: 'T-Max 400 Film',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#A4A8B6',\n id: nanoid(),\n name: 'T-Max 400 Film',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#545667',\n id: nanoid(),\n name: 'T-Max 400 Film',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_RED = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#DC4E58',\n id: nanoid(),\n name: 'Solid Red',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#DC4E58',\n id: nanoid(),\n name: 'Solid Red',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#DC4E58',\n id: nanoid(),\n name: 'Solid Red',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_BLUE = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#00A3FF',\n id: nanoid(),\n name: 'Solid Blue',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#00A3FF',\n id: nanoid(),\n name: 'Solid Blue',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#00A3FF',\n id: nanoid(),\n name: 'Solid Blue',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_GREEN = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#34BB55',\n id: nanoid(),\n name: 'Solid Green',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#34BB55',\n id: nanoid(),\n name: 'Solid Green',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#34BB55',\n id: nanoid(),\n name: 'Solid Green',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_YELLOW = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FFD255',\n id: nanoid(),\n name: 'Solid Yellow',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FFD255',\n id: nanoid(),\n name: 'Solid Yellow',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FFD255',\n id: nanoid(),\n name: 'Solid Yellow',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_PURPLE = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#BE2EE4',\n id: nanoid(),\n name: 'Solid Purple',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#BE2EE4',\n id: nanoid(),\n name: 'Solid Purple',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#BE2EE4',\n id: nanoid(),\n name: 'Solid Purple',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_SOLID_WHITE = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#fff',\n id: nanoid(),\n name: 'Solid White',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#fff',\n id: nanoid(),\n name: 'Solid White',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#fff',\n id: nanoid(),\n name: 'Solid White',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_BLIND_DARK = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#000000',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#E69F00',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#56B4E9',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#009E73',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#F0E442',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#0072B2',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#D55E00',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#CC79A7',\n id: nanoid(),\n name: 'Color Blind Friendly - Dark',\n value: 0,\n },\n]\n\nexport const LINE_COLORS_BLIND_LIGHT = [\n {\n type: COLOR_TYPE_SCALE,\n hex: '#FFFFFF',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#E69F00',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#56B4E9',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#009E73',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#F0E442',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#0072B2',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#D55E00',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n {\n type: COLOR_TYPE_SCALE,\n hex: '#CC79A7',\n id: nanoid(),\n name: 'Color Blind Friendly - Light',\n value: 0,\n },\n]\n\nexport const DEFAULT_LINE_COLORS = LINE_COLORS_A\n\nexport const LINE_COLOR_SCALES = [\n LINE_COLORS_A,\n LINE_COLORS_B,\n LINE_COLORS_C,\n LINE_COLORS_D,\n LINE_COLORS_BLIND_LIGHT,\n LINE_COLORS_BLIND_DARK,\n LINE_COLORS_E,\n LINE_COLORS_F,\n LINE_COLORS_G,\n LINE_COLORS_SOLID_RED,\n LINE_COLORS_SOLID_BLUE,\n LINE_COLORS_SOLID_YELLOW,\n LINE_COLORS_SOLID_GREEN,\n LINE_COLORS_SOLID_PURPLE,\n LINE_COLORS_SOLID_WHITE,\n].map(colorScale => {\n const name = colorScale[0].name\n const colors = colorScale\n const id = colorScale[0].id\n\n return {name, colors, id}\n})\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-error{margin-top:4px;display:flex;flex-direction:row;align-items:stretch;width:100%;border:2px solid #07070e;background-color:#07070e;border-radius:2px 0 0 2px}.flow-error--header{color:#d5d5dd;width:47px;flex:0 0 47px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding:8px 0}.flow-error--vis-toggle{align-items:center;justify-content:center;display:flex;font-size:1.5em;transition:color .25s ease;width:30px;height:30px;position:relative;color:#ff8564}.flow-error--vis-toggle:before{display:inline-block;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.flow-error--body{position:relative;flex:1 0 0;padding:8px 0}.flow-error--body h1{color:#d5d5dd;user-select:none;font-weight:600;font-size:12px;margin:0;padding:0}.flow-error--body p{margin:0}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".threshold-trash-icon--block{margin-left:8px}.threshold-trash-icon--block :hover{cursor:pointer}.threshold-add-icon--block:hover{cursor:pointer}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var map = {\n\t\"./AWS/index.ts\": 3005,\n\t\"./HTTP/index.ts\": 3006,\n\t\"./Mailgun/index.ts\": 3007,\n\t\"./Mailjet/index.ts\": 3008,\n\t\"./PagerDuty/index.ts\": 3009,\n\t\"./SendGrid/index.ts\": 3010,\n\t\"./Slack/index.ts\": 3011,\n\t\"./Telegram/index.ts\": 3012,\n\t\"./Zenoss/index.ts\": 3013\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1962;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".slack-endpoint-details--flex{display:flex;flex-direction:column;padding:8px;justify-content:space-between;height:100%}.slack-endpoint-details--flex .cf-color-picker--swatches{display:none}.slack-endpoint-details--flex .cf-color-picker--form>button{display:none}.slack-endpoint-details--flex .cf-color-picker--form .cf-status-indicator{display:none}.slack-endpoint-details--flex .cf-color-picker--input{margin-right:0px}.slack-endpoint-details--flex .cf-color-picker--form .cf-input-field{height:38px;font-size:14px}.form-element--authorization{width:100%}.form-element--authorization .cf-select-group{display:flex;justify-content:space-around;width:50%}.endpoint-details--element{height:100%}.endpoint-details--element .cf-form--label{margin-bottom:8px}.http-endpoint--flex{padding:8px}.endpoint-list--element{flex:1;max-width:14%}.slack-message-color--dropdown-item{padding-left:26px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".tag-selector-count{flex:0 0 30px;height:30px;background-color:#07070e;border-radius:50%;text-align:center;line-height:30px;font-weight:900;user-select:none;color:#00a3ff;font-size:13px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-panel--body .query-builder{border:2px solid #07070e;background-color:#07070e;border-radius:2px;padding:2px;position:relative;height:100%;width:100%}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-sidebar .flux-toolbar{flex-direction:column}.flow-nonsidebar{position:absolute;top:0;right:0;bottom:0;width:300px}.flow-nonsidebar .flux-toolbar{flex-direction:column;background-color:#1a1a2a}.flow-panel--body .flux-editor--monaco{height:100%;position:static}.flow-sidebar--secrets-list{height:100%}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-panel-region--header h5{margin-bottom:0}.flow-panel-region--header p{margin-top:0;color:#9e9ead}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".remote-csv-card{display:flex}.remote-csv--dropdown{flex:0 0 300px;margin-right:8px}.remote-csv-url-input{flex:4;width:100%}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-panel-schedule--header h5{margin-bottom:0}.flow-panel-schedule--header p{margin-top:0;color:#9e9ead}.flow-update-task--export-warning{margin:8px 0}.flow-update-task--export-warning>.cf-panel--body{padding:8px 16px}.flow-task-history h1{font-size:18px;margin-bottom:8px}.flow-task-history.inactive h1{color:#828294}.flow-task-history.inactive .toggle label{color:#828294}.flow-task-history .interaction{margin-bottom:32px;display:flex}.flow-task-history .toggle{flex:1 1;padding-top:2px}.flow-task-history .toggle label{margin-left:8px;vertical-align:sub}.flow-task-history .run{margin-bottom:16px}.flow-task-history .run label{font-weight:500;display:inline-block;width:64px}.flow-task-history .run .run--buttons{margin-top:4px;display:flex;gap:4px}.flow-task-history .run .run--buttons .cf-button{flex:1 1;width:100%}.flow-task-history .run .run--row.success span{font-weight:500;color:#2fa74d}.flow-task-history .run .run--row.failed span{font-weight:500;color:#dc4e58}.flow-task-run--log .time{white-space:nowrap}.flow-task-run--log .message pre{white-space:normal}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-spotify{text-align:center}.flow-spotify--editor{width:600px;margin:0 auto;text-align:right}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var map = {\n\t\"./Band/index.tsx\": 2976,\n\t\"./Check/index.tsx\": 2927,\n\t\"./Gauge/index.tsx\": 2977,\n\t\"./Graph/index.tsx\": 2964,\n\t\"./Heatmap/index.tsx\": 2987,\n\t\"./Histogram/index.tsx\": 2988,\n\t\"./Map/index.tsx\": 2950,\n\t\"./Mosaic/index.tsx\": 2989,\n\t\"./Scatter/index.tsx\": 2978,\n\t\"./SimpleTable/index.tsx\": 3014,\n\t\"./SingleStat/index.tsx\": 2979,\n\t\"./SingleStatWithLine/index.tsx\": 2990,\n\t\"./Table/index.tsx\": 2951\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1971;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".hover-legend-toggle,.legend-orientation-toggle,.legend-opacity-slider,.legend-colorize-rows-toggle{margin-top:8px;margin-bottom:16px}.hover-legend-toggle label.legend-orientation-label,.legend-orientation-toggle label.legend-orientation-label,.legend-opacity-slider label.legend-orientation-label,.legend-colorize-rows-toggle label.legend-orientation-label{color:#9e9ead}.legend-orientation--horizontal{margin-bottom:8px !important}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".static-legend-options .latest-axis-label{color:#9e9ead}.latest-y-axis{margin-top:16px;margin-bottom:8px}.latest-x-axis,.static-legend-height-slider{margin-bottom:16px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Libraries\nimport {binaryPrefixFormatter} from '@influxdata/giraffe'\n\n// Types\nimport {Notification, NotificationStyle} from 'src/types'\n\n// Constants\nimport {\n FIVE_SECONDS,\n TEN_SECONDS,\n FIFTEEN_SECONDS,\n INDEFINITE,\n} from 'src/shared/constants/index'\nimport {IconFont} from '@influxdata/clockface'\n\nconst bytesFormatter = binaryPrefixFormatter({\n suffix: 'B',\n significantDigits: 2,\n trimZeros: true,\n})\n\ntype NotificationExcludingMessage = Pick<\n Notification,\n Exclude\n>\n\nconst defaultButtonElement = () => null\n\nexport const defaultErrorNotification: NotificationExcludingMessage = {\n buttonElement: defaultButtonElement,\n style: NotificationStyle.Error,\n icon: IconFont.AlertTriangle,\n duration: TEN_SECONDS,\n}\n\nexport const defaultWarningNotification: NotificationExcludingMessage = {\n buttonElement: defaultButtonElement,\n style: NotificationStyle.Warning,\n icon: IconFont.Group,\n duration: TEN_SECONDS,\n}\n\nexport const defaultSuccessNotification: NotificationExcludingMessage = {\n buttonElement: defaultButtonElement,\n style: NotificationStyle.Success,\n icon: IconFont.CheckMark_New,\n duration: FIVE_SECONDS,\n}\n\nexport const defaultDeletionNotification: NotificationExcludingMessage = {\n buttonElement: defaultButtonElement,\n style: NotificationStyle.Primary,\n icon: IconFont.Trash_New,\n duration: FIVE_SECONDS,\n}\n\n// Misc Notifications\n// ----------------------------------------------------------------------------\n\nexport const copyToClipboardSuccess = (\n text: string,\n title: string = ''\n): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Cube,\n type: 'copyToClipboardSuccess',\n message: `${title} '${text}' has been copied to clipboard.`,\n})\n\nexport const copyToClipboardFailed = (\n text: string,\n title: string = ''\n): Notification => ({\n ...defaultErrorNotification,\n message: `${title}'${text}' was not copied to clipboard.`,\n})\n\nexport const prohibitedDeselect = (message?: string): Notification => ({\n ...defaultErrorNotification,\n message:\n message ?? 'You must have at least one custom aggregate function selected',\n})\n\nexport const newVersion = (version: string): Notification => ({\n ...defaultSuccessNotification,\n style: NotificationStyle.Info,\n icon: IconFont.CuboUniform,\n message: `Welcome to the latest Chronograf${version}. Local settings cleared.`,\n})\n\nexport const loadLocalSettingsFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Loading local settings failed: ${error}`,\n})\n\nexport const presentationMode = (): Notification => ({\n ...defaultSuccessNotification,\n style: NotificationStyle.Primary,\n icon: IconFont.ExpandB,\n duration: 7500,\n message: 'Press ESC to exit Presentation Mode.',\n})\n\nexport const sessionTimedOut = (): Notification => ({\n ...defaultSuccessNotification,\n style: NotificationStyle.Primary,\n icon: IconFont.AlertTriangle,\n duration: FIFTEEN_SECONDS,\n message: 'Your session has timed out. Log in again to continue.',\n})\n\nexport const resultTooLarge = (bytesRead: number): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Large response truncated to first ${bytesFormatter(bytesRead)}`,\n})\n\nexport const savingNoteFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to save note: ${error}`,\n})\n\nexport const invalidMapType = (): Notification => ({\n ...defaultErrorNotification,\n message: `Variables of type map accept two comma separated values per line`,\n})\n\nexport const invalidJSON = (message: string): Notification => {\n return {\n ...defaultErrorNotification,\n message: message\n ? `We couldn’t parse the JSON you entered because it failed with message:\\n'${message}'`\n : 'We couldn’t parse the JSON you entered because it isn’t valid. Please check the formatting and try again.',\n }\n}\n\nexport const missingUserInput = (\n reason: string = 'flux was invalid.'\n): Notification => ({\n ...defaultErrorNotification,\n message: `Missing user input: ${reason}`,\n})\n\nexport const pinnedItemFailure = (\n error: string,\n failureType: string\n): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Star,\n message: `Failed to ${failureType} pinned item: ${error}`,\n})\n\nexport const pinnedItemSuccess = (\n pinItemType: string,\n pinAction: string\n): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Star,\n message: `Successfully ${pinAction} pinned ${pinItemType} to homepage`,\n})\n\nexport const autoRefreshTimeoutSuccess = (time?: string): Notification => ({\n ...defaultSuccessNotification,\n duration: INDEFINITE,\n icon: IconFont.Clock_New,\n message: `Your auto refresh settings have been reset due to inactivity ${\n time ? 'over the last' + time : ''\n }`,\n})\n","import {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\nexport const accountDefaultSettingError = (\n accountName: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Account \"${accountName}\" was not set as the default account. The default is unchanged.`,\n})\n\nexport const accountDefaultSettingSuccess = (\n accountName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `Account \"${accountName}\" was successfully set as the default account`,\n})\n\nexport const accountRenameError = (accountName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Account \"${accountName}\" was not renamed; the rename update failed`,\n})\n\nexport const accountRenameSuccess = (\n oldAccountName: string,\n newAccountName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `Account \"${oldAccountName}\" was successfully renamed to \"${newAccountName}\"`,\n})\n\nexport const inviteFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `invite failed`,\n})\n\nexport const invitationResentFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Error sending invitation`,\n})\n\nexport const invitationResentSuccessful = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Invitation Re-sent`,\n})\n\nexport const inviteSent = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Invitation Sent`,\n})\n\nexport const invitationWithdrawnFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Error withdrawing invite, try again`,\n})\n\nexport const invitationWithdrawnSuccessful = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Invitation Withdrawn`,\n})\n\nexport const memberAddFailed = (message: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to add members: \"${message}\"`,\n})\n\nexport const memberAddSuccess = (username: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Member \"${username}\" was added successfully`,\n})\n\nexport const memberRemoveFailed = (message: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to remove members: \"${message}\"`,\n})\n\nexport const memberRemoveSuccess = (memberName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Member \"${memberName}\" was removed successfully`,\n})\n\nexport const orgCreateFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create organization',\n})\n\nexport const orgCreateSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Organization was successfully created',\n})\n\nexport const orgEditFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to update organization',\n})\n\nexport const orgEditSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Organization was successfully updated',\n})\n\nexport const orgRenameFailed = (orgName): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update organization \"${orgName}\"`,\n})\n\nexport const orgRenameSuccess = (orgName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Organization was successfully renamed \"${orgName}\"`,\n})\n\nexport const removeUserFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Error removing user, try again`,\n})\n\nexport const removeUserSuccessful = (): Notification => ({\n ...defaultSuccessNotification,\n message: `User Removed`,\n})\n\nexport const userProfileSaveSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Saved changes to your profile.',\n})\n\nexport const userProfileSaveError = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to save all changes to your profile. Please try again.',\n})\n","import {IconFont} from '@influxdata/clockface'\nimport {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\nexport const deleteAnnotationSuccess = (message: string): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Cube,\n message: message\n ? `Successfully deleted the annotation: ${message}`\n : 'Successfully deleted the annotation',\n})\n\nexport const deleteAnnotationFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to delete annotation: ${error}`,\n})\n\nexport const editAnnotationSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.CheckMark_New,\n message: 'Annotation updated successfully',\n})\n\nexport const editAnnotationFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to edit annotation: ${error}`,\n})\n\nexport const createAnnotationFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to create annotation: ${error}`,\n})\n\nexport const annotationsUnsupportedOnGraph = (\n graphType: string = 'This graph type'\n): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `${graphType} does not support adding annotations.`,\n})\n","import {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\nexport const authorizationsGetFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to get API tokens',\n})\n\nexport const authorizationCreateSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'API token was created successfully',\n})\n\nexport const passwordResetSuccessfully = (message: string): Notification => ({\n ...defaultSuccessNotification,\n message: `${message}\n If you haven't received an email, please ensure that the email you provided is correct.`,\n})\n\nexport const authorizationCreateFailed = (\n errorMessage?: string\n): Notification => {\n const defaultMsg = 'Failed to create API tokens'\n const message = errorMessage ? `${defaultMsg}: ${errorMessage}` : defaultMsg\n return {\n ...defaultErrorNotification,\n message,\n }\n}\n\nexport const authorizationUpdateSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'API token was updated successfully',\n})\n\nexport const authorizationUpdateFailed = (desc: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update API token: \"${desc}\"`,\n})\n\nexport const authorizationDeleteSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'API token was deleted successfully',\n})\n\nexport const authorizationDeleteFailed = (desc: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete API token: \"${desc}\"`,\n})\n\nexport const bulkAuthorizationDeleteSuccess = (\n numberOfTokens: number\n): Notification => ({\n ...defaultSuccessNotification,\n message: `${numberOfTokens} API ${\n numberOfTokens > 1 ? 'tokens were' : 'token'\n } deleted successfully`,\n})\n\nexport const bulkAuthorizationDeleteFailed = (desc: string): Notification => ({\n ...defaultErrorNotification,\n message: `We couldn't delete ${desc} tokens you selected. Please check the list and try again. If the problem persists, contact support.`,\n})\n\nexport const authorizationCopySuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'API token has been copied to clipboard',\n})\n\nexport const authorizationCopyFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to copy API token to clipboard',\n})\n","import {Notification} from 'src/types'\nimport {FIVE_SECONDS} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultWarningNotification,\n} from 'src/shared/copy/notifications'\n\n// Billing Notifications\nexport const updateBillingSettingsError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error updating your billing settings: ${message}`,\n})\n\nexport const getInvoicesError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error getting your invoices: ${message}`,\n})\n\nexport const getMarketplaceError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error getting your marketplace details: ${message}`,\n})\n\nexport const getBillingInfoError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error getting your billing info: ${message}`,\n})\n\nexport const updateBillingInfoError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error updating your billing info: ${message}`,\n})\n\nexport const billingContactIncompleteError = (): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message:\n 'Looks like your billing information is incomplete. Please complete the form before resubmitting.',\n})\n\nexport const updatePaymentMethodError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error updating your payment method: ${message}`,\n})\n\nexport const accountCancellationError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error cancelled your account: ${message}`,\n})\n\n// Checkout Notifications\nexport const submitError = (): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message:\n 'There was an error submitting the upgrade request, please try again.',\n})\n\nexport const getBillingSettingsError = (message: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `There was an error getting your billing settings: ${message}`,\n})\n\n/* Billing Notifications */\nexport const zuoraParamsGetFailure = (message): Notification => ({\n ...defaultErrorNotification,\n message,\n})\n\nexport const accountSelfDeletionFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `There was an error deleting the organization, please try again.`,\n})\n\nexport const deleteAccountWarning = (buttonElement): Notification => ({\n ...defaultWarningNotification,\n message: `All additional users must be removed from the Organization before the account can be deleted.\\n`,\n buttonElement,\n styles: {\n flexWrap: 'wrap',\n },\n})\n","import {Notification, NotificationButtonElement} from 'src/types'\nimport {TEN_SECONDS} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\n// Buckets\nexport const getBucketsFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to fetch buckets',\n})\n\nexport const getBucketFailed = (\n bucketID: string,\n error: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to fetch bucket with id ${bucketID}: ${error}`,\n})\n\nexport const getSchemaFailed = (\n bucketName: string,\n error: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to fetch schema for bucket with id ${bucketName}: ${error}`,\n})\n\nexport const updateAggregateType = (\n message: string,\n buttonElement?: NotificationButtonElement\n): Notification => ({\n ...defaultErrorNotification,\n message,\n buttonElement,\n duration: TEN_SECONDS,\n type: 'aggregateTypeError',\n})\n\nexport const bucketRenameSuccess = (bucketName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Bucket was successfully renamed \"${bucketName}\"`,\n})\n\nexport const bucketRenameFailed = (bucketName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to rename bucket \"${bucketName}\"`,\n})\n\nexport const addBucketLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to add label to bucket',\n})\n\nexport const removeBucketLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to remove label from bucket',\n})\n\nexport const bucketDeleteFailed = (bucketName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete bucket: \"${bucketName}\"`,\n})\n\nexport const bucketDeleteSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Bucket was deleted successfully',\n})\n\nexport const bucketCreateSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Bucket was successfully created',\n})\n\nexport const bucketCreateFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to create bucket: ${error}`,\n})\n\nexport const bucketUpdateSuccess = (bucketName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Bucket \"${bucketName}\" was successfully updated`,\n})\n\nexport const bucketUpdateFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update bucket: \"${error}\"`,\n})\n\nexport const measurementSchemaAdditionSuccessful = (\n bucketName: string,\n schemaName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `MeasurementSchema ${schemaName} has been successfully added to bucket ${bucketName}`,\n})\n\nexport const measurementSchemaUpdateSuccessful = (\n measurementName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `MeasurementSchema ${measurementName} has been successfully updated`,\n})\n\nexport const measurementSchemaAdditionFailed = (\n bucketName: string,\n schemaName: string,\n errorMsg?: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `MeasurementSchema ${schemaName} has *not* been successfully added to bucket ${bucketName}${\n errorMsg ? `, error: ${errorMsg}` : ''\n }`,\n})\n\nexport const measurementSchemaUpdateFailed = (\n measurementName: string,\n errorMsg: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `MeasurementSchema ${measurementName} has *not* been successfully updated, error: ${errorMsg}`,\n})\n","import {IconFont} from '@influxdata/clockface'\nimport {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultDeletionNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\n// Dashboard Notifications\n\nexport const dashboardGetFailed = (\n dashboardID: string,\n error: string\n): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.DashH,\n message: `Failed to load dashboard with id \"${dashboardID}\": ${error}`,\n})\n\nexport const dashboardsGetFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.DashH,\n message: `Failed to retrieve dashboards: ${error}`,\n})\n\nexport const dashboardUpdateFailed = (): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.DashH,\n message: 'Could not update dashboard',\n})\n\nexport const dashboardDeleted = (name: string): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.DashH,\n message: `Dashboard ${name} deleted successfully.`,\n})\n\nexport const dashboardCreateFailed = () => ({\n ...defaultErrorNotification,\n message: 'Failed to create dashboard.',\n})\n\nexport const dashboardCreateSuccess = () => ({\n ...defaultSuccessNotification,\n message: 'Created dashboard successfully',\n})\n\nexport const dashboardDeleteFailed = (\n name: string,\n errorMessage: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete Dashboard ${name}: ${errorMessage}.`,\n})\n\nexport const dashboardCopySuccess = () => ({\n ...defaultSuccessNotification,\n message: 'Copied dashboard to the clipboard!',\n})\n\nexport const dashboardCopyFailed = () => ({\n ...defaultErrorNotification,\n message: 'Failed to copy dashboard.',\n})\n\nexport const cellAdded = (\n cellName?: string,\n dashboardName?: string\n): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.DashH,\n message: `Added new cell ${cellName + ' '}to dashboard ${dashboardName}`,\n})\n\nexport const cellAddFailed = (\n message: string = 'unknown error'\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to add cell: ${message}`,\n})\n\nexport const cellCloneSuccess = (\n destinationDashboardID: string,\n operationType: string,\n cellName?: string\n): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.DashH,\n message: `Cell ${\n cellName ?? ''\n } successfully ${operationType} to dashboard with id ${destinationDashboardID}`,\n})\n\nexport const cellCopyFailed = (err?: string): Notification => ({\n ...defaultErrorNotification,\n message: `Cell copy failed: ${err}`,\n})\n\nexport const cellUpdateFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update cell`,\n})\n\nexport const cellDeleted = (): Notification => ({\n ...defaultDeletionNotification,\n icon: IconFont.DashH,\n duration: 1900,\n message: `Cell deleted from dashboard.`,\n})\n\nexport const addDashboardLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to add label to dashboard',\n})\n\nexport const removedDashboardLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to remove label from dashboard',\n})\n","import {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\nexport const scraperDeleteSuccess = (scraperName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Scraper \"${scraperName}\" was successfully deleted`,\n})\n\nexport const scraperDeleteFailed = (scraperName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete scraper: \"${scraperName}\"`,\n})\n\nexport const scraperCreateSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Scraper was created successfully',\n})\n\nexport const scraperCreateFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create scraper',\n})\n\nexport const scraperUpdateSuccess = (scraperName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Scraper \"${scraperName}\" was updated successfully`,\n})\n\nexport const scraperUpdateFailed = (scraperName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update scraper: \"${scraperName}\"`,\n})\n\nexport const telegrafGetFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to get telegraf configs',\n})\n\nexport const telegrafCreateFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create telegraf',\n})\n\nexport const telegrafUpdateFailed = (telegrafName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update telegraf: \"${telegrafName}\"`,\n})\n\nexport const cloneTelegrafSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Telegraf configuration was cloned successfully`,\n})\n\nexport const addTelegrafLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to add label to telegraf config`,\n})\n\nexport const removeTelegrafLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to remove label from telegraf config`,\n})\n\nexport const telegrafDeleteSuccess = (telegrafName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Telegraf \"${telegrafName}\" was deleted successfully`,\n})\n\nexport const telegrafDeleteFailed = (telegrafName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete telegraf: \"${telegrafName}\"`,\n})\n\nexport const getTelegrafConfigFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to get telegraf config',\n})\n\nexport const TelegrafDashboardCreated = (configs: string[]): Notification => ({\n ...defaultSuccessNotification,\n message: `Successfully created dashboards for telegraf plugin${\n configs.length > 1 ? 's' : ''\n }: ${configs.join(', ')}.`,\n})\n\nexport const TelegrafDashboardFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Could not create dashboards for one or more plugins`,\n})\n","import {Notification, NotificationStyle} from 'src/types'\nimport {FIVE_SECONDS, TEN_SECONDS} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\nimport {IconFont} from '@influxdata/clockface'\n\n// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Utils\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Limits\nexport const readWriteCardinalityLimitReached = (\n message: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to write data due to plan limits: ${message}`,\n duration: FIVE_SECONDS,\n type: 'readWriteCardinalityLimitReached',\n})\n\nexport const readLimitReached = (): Notification => ({\n ...defaultErrorNotification,\n message: `Exceeded query limits.`,\n duration: FIVE_SECONDS,\n type: 'readLimitReached',\n})\n\nexport const rateLimitReached = (secs?: number): Notification => {\n const retryText = ` Please try again in ${secs} seconds`\n return {\n ...defaultErrorNotification,\n message: `Exceeded rate limits.${secs ? retryText : ''} `,\n duration: FIVE_SECONDS,\n type: 'rateLimitReached',\n }\n}\n\nexport const writeLimitReached = (\n message: string,\n Button: any,\n duration?: number\n) => ({\n ...defaultErrorNotification,\n icon:\n CLOUD && isFlagEnabled('credit250Experiment')\n ? IconFont.AlertTriangle\n : defaultErrorNotification.icon,\n message,\n duration: duration ?? TEN_SECONDS,\n type: 'writeLimitReached',\n style: NotificationStyle.Secondary,\n buttonElement: () => Button,\n})\n\nexport const resourceLimitReached = (resourceName: string): Notification => ({\n ...defaultErrorNotification,\n message: `Oops. It looks like you have reached the maximum number of ${resourceName} allowed as part of your plan. If you would like to upgrade and remove this restriction, reach out to support@influxdata.com.`,\n duration: FIVE_SECONDS,\n type: 'resourceLimitReached',\n})\n\nexport const queryCancelRequest = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Query cancelled.`,\n})\n","import {Notification} from 'src/types'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\n// Notebooks\n\nexport const notebookRunFail = (projectName: string): Notification => ({\n ...defaultErrorNotification,\n message: `${projectName} run failed`,\n})\n\nexport const panelCopyLinkSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Panel link copied successfully!`,\n})\n\nexport const panelCopyLinkFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to copy the panel link`,\n})\n\nexport const notebookCreateFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to create Notebook, please try again.`,\n})\n\nexport const notebookUpdateFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to save changes to Notebook, please try again.`,\n})\n\nexport const notebookDeleteFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete Notebook, please try again.`,\n})\n\nexport const notebookDeleteSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Notebook was deleted successfully',\n})\n\nexport const csvUploaderErrorNotification = (\n message: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to upload the selected CSV: ${message}`,\n})\n\nexport const csvUploadCancelled = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Successfully cancelled CSV Upload',\n})\n\nexport const publishNotebookSuccessful = (name: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Successfully saved this version to ${name}'s version history.`,\n})\n\nexport const publishNotebookFailed = (name: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to save this version to ${name}'s version history`,\n})\n","export const QUICKSTART_DASHBOARD_NAME = 'InfluxDB OSS Metrics'\n","import {Notification} from 'src/types'\nimport {\n defaultSuccessNotification,\n defaultErrorNotification,\n} from 'src/shared/copy/notifications'\nimport {QUICKSTART_SCRAPER_TARGET_URL} from 'src/dataLoaders/constants/pluginConfigs'\nimport {QUICKSTART_DASHBOARD_NAME} from 'src/onboarding/constants/index'\n\n// Onboarding notifications\nexport const SetupSuccess: Notification = {\n ...defaultSuccessNotification,\n message: 'Initial user details have been successfully set',\n}\n\nexport const SetupError = (message: string): Notification => ({\n ...defaultErrorNotification,\n message: `Could not set up admin user: ${message}`,\n})\n\nexport const SigninError: Notification = {\n ...defaultErrorNotification,\n message: `Could not sign in`,\n}\n\nexport const checkStatusLoading: Notification = {\n ...defaultSuccessNotification,\n message: `Currently loading checks`,\n}\n\nexport const QuickstartScraperCreationSuccess: Notification = {\n ...defaultSuccessNotification,\n message: `The InfluxDB Scraper has been configured for ${QUICKSTART_SCRAPER_TARGET_URL}`,\n}\n\nexport const QuickstartScraperCreationError: Notification = {\n ...defaultErrorNotification,\n message: `Failed to configure InfluxDB Scraper`,\n}\n\nexport const QuickstartDashboardCreationSuccess: Notification = {\n ...defaultSuccessNotification,\n message: `The ${QUICKSTART_DASHBOARD_NAME} Dashboard has been created`,\n}\n\nexport const QuickstartDashboardCreationError: Notification = {\n ...defaultErrorNotification,\n message: `Failed to create ${QUICKSTART_DASHBOARD_NAME} Dashboard`,\n}\n\nexport const TelegrafConfigCreationSuccess: Notification = {\n ...defaultSuccessNotification,\n message: `Your configurations have been saved`,\n}\n\nexport const TelegrafConfigCreationError: Notification = {\n ...defaultErrorNotification,\n message: `Failed to save configurations`,\n}\n\nexport const TokenCreationError: Notification = {\n ...defaultErrorNotification,\n message: `Failed to create a new Telegraf API Token`,\n}\n","import {Notification} from 'src/types'\nimport {FIVE_SECONDS} from 'src/shared/constants/index'\nimport {\n defaultSuccessNotification,\n defaultErrorNotification,\n} from 'src/shared/copy/notifications'\n\n// Operator Notifications\nexport const getOrgsError = (): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message:\n 'There was an error getting the all the organizations, please try again.',\n})\n\nexport const getOrgError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Could not find organization with ID ${id}`,\n})\n\nexport const getLimitsError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Could not fetch limits for the organization ${id}`,\n})\n\nexport const updateLimitsError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Could not update limits for the organization ${id}`,\n})\n\nexport const updateLimitsSuccess = (id: string): Notification => ({\n ...defaultSuccessNotification,\n duration: FIVE_SECONDS,\n message: `Successfully updated limits for the organization ${id}`,\n})\n\nexport const getAccountsError = (): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: 'There was an error getting the all the accounts, please try again.',\n})\n\nexport const getAccountError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Could not get the account for ID: ${id}`,\n})\n\nexport const convertAccountError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to convert the account with the ID ${id}, please try again.`,\n})\n\nexport const deleteAccountError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to delete the account with the ID ${id}, please try again.`,\n})\n\nexport const removeUserAccountError = (id: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to remove the user from the account with the ID ${id}, please try again.`,\n})\n","import {Notification} from 'src/types'\nimport {defaultErrorNotification} from 'src/shared/copy/notifications'\n\n// Secrets\nexport const getSecretsFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to fetch secrets',\n})\n\nexport const createSecretFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create secret',\n})\n\nexport const upsertSecretFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create or update secret',\n})\n\nexport const deleteSecretsFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to delete secret',\n})\n","import {Notification} from 'src/types'\nimport {defaultErrorNotification} from 'src/shared/copy/notifications'\n\nexport const subscriptionCreateFail = (message?: string): Notification => ({\n ...defaultErrorNotification,\n message: message\n ? message\n : `Failed to create Subscription, please try again.`,\n})\n\nexport const subscriptionUpdateFail = (message?: string): Notification => ({\n ...defaultErrorNotification,\n message: message\n ? message\n : `Failed to update Subscription, please try again.`,\n})\n\nexport const subscriptionStatusUpdateFail = (\n message?: string\n): Notification => ({\n ...defaultErrorNotification,\n message: message\n ? message\n : `Failed to update Subscription status, please try again.`,\n})\n\nexport const subscriptionsGetFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to get Subscriptions, please try again.`,\n})\n\nexport const subscriptionStatusesGetFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to get Subscription Statuses, please try again.`,\n})\n\nexport const subscriptionsDeleteFail = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete the Subscription, please try again.`,\n})\n","import {Notification} from 'src/types'\nimport {FIVE_SECONDS} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\n// Task Notifications\n// ----------------------------------------------------------------------------\nexport const addTaskLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to add label to task',\n})\n\nexport const removeTaskLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to remove label from task',\n})\n\n// Labels\nexport const getLabelsFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to fetch labels',\n})\n\nexport const createLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to create label',\n})\n\nexport const updateLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to update label',\n})\n\nexport const deleteLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to delete label',\n})\n\nexport const taskNotCreated = (additionalMessage: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to create new task: ${additionalMessage}`,\n})\n\nexport const taskCreatedSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'New task created successfully',\n})\n\nexport const taskNotFound = (additionalMessage: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to find task: ${additionalMessage}`,\n})\n\nexport const tasksFetchFailed = (additionalMessage: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to get tasks from server: ${additionalMessage}`,\n})\n\nexport const taskDeleteFailed = (additionalMessage: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to delete task: ${additionalMessage}`,\n})\n\nexport const taskDeleteSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n message: 'Task was deleted successfully',\n})\n\nexport const taskCloneSuccess = (taskName: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Successfully cloned task ${taskName}`,\n})\n\nexport const taskCloneFailed = (\n taskName: string,\n additionalMessage: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to clone task ${taskName}: ${additionalMessage} `,\n})\n\nexport const taskUpdateFailed = (\n additionalMessage: string,\n taskName?: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update task ${\n taskName ? taskName : ''\n }: ${additionalMessage}`,\n})\n\nexport const taskUpdateSuccess = (taskName?: string): Notification => ({\n ...defaultSuccessNotification,\n message: `Task ${taskName ? taskName : ''} was updated successfully`,\n})\n\nexport const taskImportFailed = (errorMessage: string): Notification => ({\n ...defaultErrorNotification,\n duration: undefined,\n message: `Failed to import Task: ${errorMessage}.`,\n})\n\nexport const taskImportSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n duration: FIVE_SECONDS,\n message: `Successfully imported task.`,\n})\n\nexport const taskRunSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n duration: FIVE_SECONDS,\n message: 'Task scheduled successfully',\n})\n\nexport const taskRunFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to run task: ${error}`,\n})\n\nexport const taskGetFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to get runs: ${error}`,\n})\n\nexport const taskRetrySuccess = (id: string): Notification => ({\n ...defaultSuccessNotification,\n duration: FIVE_SECONDS,\n message: `Task run ${id} successfully scheduled`,\n})\n\nexport const taskRetryFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message: `Failed to retry Task: ${error}`,\n})\n","import {Notification} from 'src/types'\nimport {INDEFINITE} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n defaultDeletionNotification,\n} from 'src/shared/copy/notifications'\n\n// Templates\n\nexport const importDashboardSucceeded = (): Notification => ({\n ...defaultSuccessNotification,\n message: `Successfully imported dashboard.`,\n})\n\nexport const importDashboardFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to import dashboard: ${error}`,\n})\n\nexport const importTemplateFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to import template: ${error}`,\n})\n\nexport const createTemplateFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to resource as template: ${error}`,\n})\n\nexport const updateTemplateFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to update template: ${error}`,\n})\n\nexport const resourceSavedAsTemplate = (\n resourceName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `Successfully saved ${resourceName.toLowerCase()} as template.`,\n})\n\nexport const saveResourceAsTemplateFailed = (\n resourceName: string,\n error: string\n): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to save ${resourceName.toLowerCase()} as template: ${error}`,\n})\n\nexport const communityTemplateInstallSucceeded = (\n templateName: string\n): Notification => ({\n ...defaultSuccessNotification,\n message: `We've successfully installed: ${templateName}`,\n})\n\nexport const communityTemplateInstallFailed = (): Notification => ({\n ...defaultErrorNotification,\n duration: INDEFINITE,\n message: 'There was a problem installing the template. Please try again.',\n})\n\nexport const communityTemplateDeleteSucceeded = (\n templateName: string\n): Notification => ({\n ...defaultDeletionNotification,\n message: `We've successfully deleted: ${templateName}`,\n})\n\nexport const communityTemplateDeleteFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'We were unable to delete the template. Please try again.',\n})\n\nexport const communityTemplateFetchStackFailed = (): Notification => ({\n ...defaultErrorNotification,\n message:\n 'We could not fetch your installed resources. Please reload the page to try again.',\n})\n\nexport const communityTemplateUnsupportedFormatError = (): Notification => ({\n ...defaultErrorNotification,\n message: `Please provide a link to a template file`,\n})\n\nexport const communityTemplateRenameFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `We've successfully installed your template but weren't able to name it properly. It may appear as a blank template.`,\n})\n","import {IconFont} from '@influxdata/clockface'\nimport {Notification} from 'src/types'\nimport {INDEFINITE} from 'src/shared/constants/index'\nimport {\n defaultErrorNotification,\n defaultSuccessNotification,\n} from 'src/shared/copy/notifications'\n\n// Variables & URL Queries\nexport const invalidTimeRangeValueInURLQuery = (): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Invalid URL query value supplied for lower or upper time range.`,\n})\n\nexport const invalidVariableNameValuePairInURLQuery = (\n name: string,\n value: string\n): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Invalid URL query value \"${value}\" supplied for variable name \"${name}\".`,\n})\n\nexport const getVariablesFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to fetch variables',\n})\n\nexport const getVariableFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: 'Failed to fetch variable',\n})\n\nexport const getVariableFailedWithMessage = (name, message): Notification => ({\n ...defaultErrorNotification,\n duration: INDEFINITE,\n message: `Failed to fetch variable ${name}: ${message}`,\n})\n\nexport const createVariableFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to create variable: ${error}`,\n})\n\nexport const createVariableSuccess = (name: string): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Cube,\n message: `Successfully created new variable: ${name}.`,\n})\n\nexport const deleteVariableFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to delete variable: ${error}`,\n})\n\nexport const deleteVariableSuccess = (): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Cube,\n message: 'Successfully deleted the variable',\n})\n\nexport const updateVariableFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to update variable: ${error}`,\n})\n\nexport const updateVariableSuccess = (name: string): Notification => ({\n ...defaultSuccessNotification,\n icon: IconFont.Cube,\n message: `Successfully updated variable: ${name}.`,\n})\n\nexport const moveVariableFailed = (error: string): Notification => ({\n ...defaultErrorNotification,\n icon: IconFont.Cube,\n message: `Failed to move variable: ${error}`,\n})\n\nexport const addVariableLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to add label to variables`,\n})\n\nexport const removeVariableLabelFailed = (): Notification => ({\n ...defaultErrorNotification,\n message: `Failed to remove label from variables`,\n})\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Token {\n token?: string\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function(\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function(\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function(\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function(\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetMapTokenParams {}\n\ntype GetMapTokenResult =\n | GetMapTokenOKResult\n | GetMapTokenUnauthorizedResult\n | GetMapTokenInternalServerErrorResult\n | GetMapTokenDefaultResult\n\ninterface GetMapTokenOKResult {\n status: 200\n headers: Headers\n data: Token\n}\n\ninterface GetMapTokenUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetMapTokenInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetMapTokenDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getMapToken = (\n params: GetMapTokenParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/maps/mapToken', params, options) as Promise<\n GetMapTokenResult\n >\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".mapTypeOptions{display:grid;grid-template-columns:repeat(4, 1fr)}.allowPanAndZoom{display:grid;grid-template-columns:1fr 1fr;width:100%}.allowPanZoomInput{left:20px;justify-self:end}.geo-dropdowns{flex:\\\"0 0 120px\\\";padding-bottom:10px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".single-stat{display:flex;align-items:center;justify-content:center;overflow:hidden;width:100%;height:100%;padding:8px;color:#00c9ff;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;position:absolute;top:0;left:0;right:0;bottom:0;border-radius:2px}.single-stat,.single-stat:hover{cursor:default}.single-stat--resizer{display:flex;overflow:hidden;width:100%;height:100%}.dygraph-child .single-stat--resizer{height:100%;margin-top:0}.single-stat--text{font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:300;letter-spacing:-0.05em}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.customizable-field{width:100%;display:flex;flex-wrap:nowrap;align-items:center;height:30px;margin-top:4px}.customizable-field:first-of-type{margin-top:0}.customizable-field.dragging{border-radius:4px;opacity:.4;background:#00a3ff;background:-moz-linear-gradient(left, #00a3ff 0%, #be2ee4 100%);background:-webkit-linear-gradient(left, #00a3ff 0%, #be2ee4 100%);background:linear-gradient(to right, #00a3ff 0%, #be2ee4 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.customizable-field.dragging>*{opacity:0}.customizable-field--label,.customizable-field--label__hidden{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;height:30px;display:flex;flex-wrap:nowrap;align-items:center;padding:0 11px 0 0;border-radius:4px;width:100%;transition:background-color .25s ease,color .25s ease}.customizable-field--label,.customizable-field--label:hover,.customizable-field--label__hidden,.customizable-field--label__hidden:hover{cursor:default}.customizable-field--label>span,.customizable-field--label__hidden>span{margin-right:5px}.customizable-field--label{color:#b9b9c5;background-color:#333346}.customizable-field--label__hidden{background-color:#1a1a2a;color:#4d4d60;font-style:italic}.customizable-field--input{margin-left:4px;width:calc(40% - 4px);display:flex;align-items:center;height:100%}.customizable-field .input-cte__empty{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.customizable-field--name{flex:1 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;font-size:13px;margin-left:6px}.customizable-field--drag,.customizable-field--visibility{display:inline-block;width:30px;height:30px;position:relative}.customizable-field--drag:hover,.customizable-field--visibility:hover{cursor:grab}.customizable-field--visibility{width:18px}.customizable-field--drag .hamburger,.customizable-field--visibility .cf-icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.customizable-field--drag .hamburger{width:10px;height:2px;background-color:#9e9ead;transition:background-color .25s ease;border-radius:1px}.customizable-field--drag .hamburger:before,.customizable-field--drag .hamburger:after{position:absolute;display:block;content:\\\"\\\";width:100%;height:100%;background-color:#9e9ead;transition:background-color .25s ease;border-radius:1px;left:0}.customizable-field--drag .hamburger:before{top:-4px}.customizable-field--drag .hamburger:after{top:4px}.customizable-field--label__hidden .customizable-field--drag .hamburger,.customizable-field--label__hidden .customizable-field--drag .hamburger:before,.customizable-field--label__hidden .customizable-field--drag .hamburger:after{background-color:#4d4d60}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-visualization--header .search-widget-input{flex:0 1 500px}.query-stat{padding:8px 0;white-space:nowrap}.query-stat--bold{font-weight:600;color:#b9b9c5;padding-left:8px;padding-right:16px}.query-stat--normal{color:#828294;padding:0 8px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-panel-time--header h5{margin-bottom:0}.flow-panel-time--header p{margin-top:0;color:#9e9ead}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".threshold-entry--container{position:relative;left:60px;width:263px;margin-bottom:8px}.error-threshold--text-block{min-width:56px;text-align:right;background:rgba(0,0,0,0)}.error-threshold-flex--margin{margin:0 4px 8px}.add-error-threshold--button{width:100%;margin-bottom:8px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-visualization{background-color:#07070e;border-radius:2px;display:flex;flex-direction:column;align-items:stretch;height:100%;padding:12px}.flow-visualization--header{display:flex}.flow-visualization--view-error,.flow-visualization--view{flex-grow:1;width:100%;border-radius:1px;background-color:#07070e}.flow-visualization--view-error .empty-graph-error,.flow-visualization--view .empty-graph-error{height:200px}.flow-visualization--view-error .qr-code,.flow-visualization--view .qr-code{width:60%}.flow-visualization--view-error{background-color:#dc4e58}.flow-sidebar--submenu .view-options{padding:0;padding-right:15px}.flow-visualization--export-warning{margin:8px 0}.flow-visualization--export-warning>.cf-panel--body{padding:8px 16px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".flow-youtube{text-align:center;height:100%}.flow-youtube--editor{width:600px;margin:0 auto;padding-bottom:40px;text-align:right}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_AT_RULE_IMPORT_0___ = require(\"-!../../node_modules/css-loader/dist/cjs.js!../../node_modules/@influxdata/react-custom-scrollbars/dist/styles.css\");\nvar ___CSS_LOADER_GET_URL_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/getUrl.js\");\nvar ___CSS_LOADER_URL_IMPORT_0___ = require(\"../../assets/images/dashboard-empty--dark.svg\");\nvar ___CSS_LOADER_URL_IMPORT_1___ = require(\"../../assets/images/dashboard-empty--light.svg\");\nvar ___CSS_LOADER_URL_IMPORT_2___ = require(\"../../assets/images/cubo_doodle.svg\");\nvar ___CSS_LOADER_URL_IMPORT_3___ = require(\"../../assets/images/cubo_doodle_green.svg\");\nvar ___CSS_LOADER_URL_IMPORT_4___ = require(\"../../assets/images/drag-n-drop.svg\");\nvar ___CSS_LOADER_URL_IMPORT_5___ = require(\"assets/images/NotFoundBottom.png\");\nvar ___CSS_LOADER_URL_IMPORT_6___ = require(\"assets/images/SlackIcon.png\");\nvar ___CSS_LOADER_URL_IMPORT_7___ = require(\"../../assets/images/radial-power-level.svg\");\nvar ___CSS_LOADER_URL_IMPORT_8___ = require(\"../../assets/images/auth-logo.svg\");\nvar ___CSS_LOADER_URL_IMPORT_9___ = require(\"assets/images/dashboard-empty--dark.svg\");\nvar ___CSS_LOADER_URL_IMPORT_10___ = require(\"../../assets/images/plugin-simple.svg\");\nvar ___CSS_LOADER_URL_IMPORT_11___ = require(\"../../assets/images/plan-graphic--free.svg\");\nvar ___CSS_LOADER_URL_IMPORT_12___ = require(\"assets/images/checkout-overlay--success.svg\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\nexports.i(___CSS_LOADER_AT_RULE_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\nvar ___CSS_LOADER_URL_REPLACEMENT_5___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_5___);\nvar ___CSS_LOADER_URL_REPLACEMENT_6___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_6___);\nvar ___CSS_LOADER_URL_REPLACEMENT_7___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_7___);\nvar ___CSS_LOADER_URL_REPLACEMENT_8___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_8___);\nvar ___CSS_LOADER_URL_REPLACEMENT_9___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_9___);\nvar ___CSS_LOADER_URL_REPLACEMENT_10___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_10___);\nvar ___CSS_LOADER_URL_REPLACEMENT_11___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_11___);\nvar ___CSS_LOADER_URL_REPLACEMENT_12___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_12___);\n// Module\nexports.push([module.id, \".cell--view-empty,.wizard--credits{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.cell--view-empty,.wizard--credits{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.multiple-input-index{padding:10px;width:83.33333%;background-color:#1a1a2a;margin:0 auto 20px auto;border-radius:4px}.wizard--full-screen{position:relative;min-width:100%;min-height:100%;max-height:100%;padding:32px 64px;z-index:50;display:inline-flex;flex-direction:column;justify-content:space-between;align-items:center}.wizard--credits{font-size:13px;color:#828294;display:inline-flex;align-items:center}.wizard--credits span{margin:0 5px}.wizard--credits a{color:#828294;text-decoration:none}.wizard--credits a:hover,.wizard--credits a:active{color:#00a3ff}.wizard--progress-header{position:relative;background-color:#07070e;width:100%;height:60px;flex-shrink:0;padding:0 16px;display:inline-flex;justify-content:center;align-items:center;border-radius:4px;transition:height .4s ease-in-out}.wizard--progress-header.hidden{visibility:hidden}@media screen and (min-width: 750px){.wizard--progress-header{height:50px}}.wizard-overlay{height:calc(100vh - 206px);width:100%;position:relative;display:inline-flex;flex-direction:column}.wizard-overlay>.wizard-contents{width:100%;min-width:100%;flex-grow:1;margin:0}.wizard--progress-bar{display:inline-flex;justify-content:center;align-items:center;align-self:center;width:100%;flex-shrink:0}.wizard--progress-icon{position:relative;font-size:0;height:0;width:0;border-radius:13px;background-color:#07070e;opacity:0;display:inline-flex;margin-right:0;flex-shrink:0;color:#4d4d60;transition:opacity .4s ease-in-out,width .4s ease-in-out,height .4s ease-in-out}.wizard--progress-icon>.icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.wizard--progress-icon.circle-thick{color:#4d4d60}.wizard--progress-icon.checkmark{color:#2fa74d}.wizard--progress-icon.current{color:#00a3ff}.wizard--progress-icon.remove{color:#f95f53}.wizard--progress-title{font-weight:700;color:#4d4d60;font-size:12px;transition:color .4s ease-in-out,font-size .4s ease-in-out}.wizard--progress-title.checkmark{color:#2fa74d}.wizard--progress-title.circle-thick{color:#4d4d60}.wizard--progress-title.current{color:#f1f1f3}.wizard--progress-title.remove{color:#f95f53}.wizard--progress-button{display:inline-flex;align-items:center;cursor:pointer;margin:0 4px;flex-shrink:1;text-align:center}.wizard--progress-button:hover .wizard--progress-title{color:#f1f1f3}.unclickable{cursor:default}.wizard--progress-connector{min-width:20px;width:100%;max-width:70px;margin:0 4px;height:2px;background-color:#4d4d60;position:relative;display:inline-block;border-radius:2px}.wizard--progress-connector:after{content:\\\"\\\\a\\\";position:absolute;background-color:#2fa74d;top:0;bottom:0;left:0;width:0;border-radius:2px;transition:all .5s}.wizard--progress-connector--none:after{width:0}.wizard--progress-connector--some:after{width:50%}.wizard--progress-connector--full:after{width:100%}@media screen and (min-width: 1080px){.wizard--progress-title{font-size:15px}.wizard--progress-button{flex-shrink:0}.wizard--progress-icon{font-size:12px;height:26px;width:26px;opacity:1;margin-right:8px}}.wizard-overlay .wizard-contents{background-color:rgba(0,0,0,0);border-radius:0;margin:0}.wizard-overlay .wizard-step--container{background-color:rgba(0,0,0,0);border-radius:0;padding:0}.wizard-overlay .wizard-step--scroll-content{max-width:100%;justify-content:flex-start;min-height:0}.wizard-overlay .wizard-step--grid-container{width:90%}.wizard-overlay .wizard-step--scroll-area{border:0;border-radius:0}.wizard-overlay .responsive-grid-sizer{margin-top:32px}.context-menu{display:flex;align-items:center}.context-menu--boost-z{position:relative;z-index:9999 !important}.context-menu--container{position:relative}.context-menu--container .button{position:relative;border:0;border-radius:3px;background-color:#07070e;color:#b9b9c5;transition:color .25s ease,background-color .25s ease;outline:none}.context-menu--container .button:hover{cursor:pointer;color:#fff}.context-menu--container .button.active{color:#fff}.context-menu--list{transition:opacity .25s ease;opacity:0;display:flex;flex-direction:column;align-items:stretch;border-radius:4px;position:relative}.context-menu--list:before{content:\\\"\\\";border:8px solid rgba(0,0,0,0);position:absolute;top:0;right:50%;transform:translate(50%, -100%)}.context-menu--list-container{z-index:2;position:absolute;right:50%;top:24px;padding-top:8px;transform:translateX(50%);transition:all;visibility:hidden}.context-menu--list-container.open{visibility:visible}.context-menu--list-container.open .context-menu--list{opacity:1}.context-menu--item{text-align:left;color:#fff;outline:none;border:0;background-color:rgba(0,0,0,0);font-weight:700;font-size:13px;line-height:13px;white-space:nowrap;padding:8px;transition:background-color .25s ease}.context-menu--item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.context-menu--item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.context-menu--item:hover{cursor:pointer}.context-menu--item.context-menu--item__disabled,.context-menu--item.context-menu--item__disabled:hover{cursor:default;color:rgba(255,255,255,.6);font-style:italic;background-color:rgba(0,0,0,0)}.contex-menu--item-description{font-size:11px;font-weight:400;padding-top:4px;white-space:normal;width:200px}.context-menu--align-left{justify-content:flex-start}.context-menu--align-left>.context-menu--container{margin-left:2px}.context-menu--align-left>.context-menu--container:first-child{margin-left:0}.context-menu--align-left>.context-menu--container:first-child .context-menu--list-container{right:0;transform:translateX(calc(100% - 24px))}.context-menu--align-left>.context-menu--container:first-child .context-menu--list:before{right:calc(100% - 12px)}.context-menu--align-right{justify-content:flex-end}.context-menu--align-right>.context-menu--container{margin-right:2px}.context-menu--align-right>.context-menu--container:last-child{margin-right:0}.context-menu--align-right>.context-menu--container:last-child .context-menu--list-container{right:0;transform:translateX(0)}.context-menu--align-right>.context-menu--container:last-child .context-menu--list:before{right:12px}.context-menu--toggle.context-menu--default:hover{background-color:#4d4d60}.context-menu--toggle.context-menu--default.active{background-color:#68687b}.context-menu--list.context-menu--default{background-color:#4d4d60}.context-menu--list.context-menu--default:before{border-bottom-color:#4d4d60}.context-menu--list.context-menu--default .context-menu--item:hover{background-color:#68687b}.context-menu--toggle.context-menu--primary:hover{background-color:#00a3ff}.context-menu--toggle.context-menu--primary.active{background-color:#00c9ff}.context-menu--list.context-menu--primary{background-color:#00a3ff}.context-menu--list.context-menu--primary:before{border-bottom-color:#00a3ff}.context-menu--list.context-menu--primary .context-menu--item:hover{background-color:#00c9ff}.context-menu--toggle.context-menu--secondary:hover{background-color:#be2ee4}.context-menu--toggle.context-menu--secondary.active{background-color:#ce58eb}.context-menu--list.context-menu--secondary{background-color:#be2ee4}.context-menu--list.context-menu--secondary:before{border-bottom-color:#be2ee4}.context-menu--list.context-menu--secondary .context-menu--item:hover{background-color:#ce58eb}.context-menu--toggle.context-menu--success:hover{background-color:#2fa74d}.context-menu--toggle.context-menu--success.active{background-color:#67d74e}.context-menu--list.context-menu--success{background-color:#2fa74d}.context-menu--list.context-menu--success:before{border-bottom-color:#2fa74d}.context-menu--list.context-menu--success .context-menu--item:hover{background-color:#67d74e}.context-menu--toggle.context-menu--alert:hover{background-color:#ffb94a}.context-menu--toggle.context-menu--alert.active{background-color:#ffd255}.context-menu--list.context-menu--alert{background-color:#ffb94a}.context-menu--list.context-menu--alert:before{border-bottom-color:#ffb94a}.context-menu--list.context-menu--alert .context-menu--item:hover{background-color:#ffd255}.context-menu--toggle.context-menu--danger:hover{background-color:#f95f53}.context-menu--toggle.context-menu--danger.active{background-color:#ff8564}.context-menu--list.context-menu--danger{background-color:#f95f53}.context-menu--list.context-menu--danger:before{border-bottom-color:#f95f53}.context-menu--list.context-menu--danger .context-menu--item:hover{background-color:#ff8564}.color-dropdown--item{display:flex;align-items:center;justify-content:flex-start}.color-dropdown--swatch{width:12px;height:12px;border-radius:50%;margin-right:5px}.avatar{border-radius:50%;background-position:center center;background-size:100% 100%}.time-machine-tables{display:flex;align-items:stretch;flex-wrap:nowrap;width:100%;height:100%}.time-machine-sidebar{flex:1 0 180px;background-color:#07070e;margin-right:4px;overflow:hidden;border-radius:2px;border:2px solid #1a1a2a}.time-machine-sidebar--heading{padding:10px;background:#1a1a2a;height:50px}.time-machine-sidebar--scroll{height:calc(100% - 50px) !important}.time-machines-sidebar--filter.form-control.cf-input-xs{font-size:12px}.time-machine-sidebar--items{width:100%;display:inline-flex;flex-direction:column}.time-machine-sidebar-item{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;color:#9e9ead;font-size:12px;font-weight:400;padding:8px 8px;transition:color .25s ease,background-color .25s ease;white-space:nowrap}.time-machine-sidebar-item,.time-machine-sidebar-item:hover{cursor:default}.time-machine-sidebar-item>span{padding-right:2px}.time-machine-sidebar-item>span.key,.time-machine-sidebar-item>span.equals{color:rgba(158,158,173,.7)}.time-machine-sidebar-item>span.value{font-weight:600;padding-right:8px;color:#9e9ead}.time-machine-sidebar-item:hover{background-color:#07070e;color:#9e9ead;cursor:pointer}.time-machine-sidebar-item:hover>span.key,.time-machine-sidebar-item:hover>span.equals{color:#9e9ead}.time-machine-sidebar-item:hover>span.value{color:#fff}.time-machine-sidebar-item.active{background-color:#1a1a2a;color:#fff}.time-machine-sidebar-item.active>span.key,.time-machine-sidebar-item.active>span.equals{color:#fff}.time-machine-sidebar-item.active>span.value{color:#00a3ff}.time-machine-table{flex:4 0 100px;border:2px solid #1a1a2a;border-radius:1px;overflow:hidden}.time-machine-table:only-child{border:1}.table-graph-cell{user-select:text !important;-o-user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;line-height:28px;padding:0 6px;font-size:12px;background-color:#07070e;font-weight:500;color:#9e9ead;border:1px solid #1a1a2a;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.table-graph-cell__highlight-row{color:#fff;background-color:#07070e}.table-graph-cell__numerical{font-family:\\\"Roboto Mono\\\",monospace;text-align:right}.table-graph-cell__fixed-row,.table-graph-cell__fixed-column{font-weight:700;color:#b9b9c5;background-color:#07070e}.table-graph-cell__fixed-row{border-top:0}.table-graph-cell__fixed-column{border-left:0}.table-graph-cell__fixed-corner{font-weight:700;border-top:0;border-left:0;color:#f1f1f3;background-color:#1a1a2a}.table-graph-cell__field-name{padding-right:17px}.table-graph-cell__field-name:before{font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;content:\\\"\\\";font-size:17px;position:absolute;top:50%;right:6px;transform:translateY(-50%) rotate(180deg);font-size:13px;opacity:0;transition:opacity .25s ease,color .25s ease,transform .25s ease}.table-graph-cell__field-name:hover{cursor:pointer}.table-graph-cell__field-name:hover:before{opacity:1}.table-graph-cell__sort-asc,.table-graph-cell__sort-desc{color:#00a3ff}.table-graph-cell__sort-asc:before,.table-graph-cell__sort-desc:before{opacity:1}.table-graph-cell__sort-asc:before{transform:translateY(-50%) rotate(180deg)}.table-graph-cell__sort-desc:before{transform:translateY(-50%) rotate(0deg)}.time-machine-table.time-machine-table__light-mode{border-color:#d5d5dd}.time-machine-table.time-machine-table__light-mode .table-graph-cell{background-color:#fff;color:#68687b;border-color:#d5d5dd}.time-machine-table.time-machine-table__light-mode .table-graph-cell__highlight-row{color:#333346;background-color:#f1f1f3}.time-machine-table.time-machine-table__light-mode .table-graph-cell__fixed-row,.time-machine-table.time-machine-table__light-mode .table-graph-cell__fixed-column{color:#68687b;background-color:#f1f1f3}.time-machine-table.time-machine-table__light-mode .table-graph-cell__fixed-corner{color:#333346;background-color:#d5d5dd}.time-machine-table.time-machine-table__light-mode .table-graph-cell__sort-asc,.time-machine-table.time-machine-table__light-mode .table-graph-cell__sort-desc{color:#00a3ff}.time-machine-sidebar.time-machine-sidebar__light{background-color:#fff;border-color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar--heading{background:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item{color:#68687b}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item>span.key,.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item>span.equals{color:rgba(104,104,123,.7)}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item>span.value{color:#68687b}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item:hover{background-color:#f1f1f3;color:#68687b}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item:hover>span.key,.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item:hover>span.equals{color:#68687b}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item:hover>span.value{color:#333346}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item.active{background-color:#d5d5dd;color:#333346}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item.active>span.key,.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item.active>span.equals{color:#333346}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar-item.active>span.value{color:#00a3ff}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input{background-color:#f1f1f3;color:#4d4d60;border-color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input::-webkit-input-placeholder{color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input::-moz-placeholder{color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input:-ms-input-placeholder{color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input:-moz-placeholder{color:#d5d5dd}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter>input:focus{border-color:#00a3ff;background-color:#fff}.time-machine-sidebar.time-machine-sidebar__light .cf-input.time-machine-sidebar--filter:hover>input{background-color:#fff;border-color:#6bbcee}.time-machine-sidebar.time-machine-sidebar__light .cf-input.cf-input__focused.time-machine-sidebar--filter>.cf-input-icon{color:#00a3ff}.time-machine-sidebar.time-machine-sidebar__light .time-machine-sidebar--scroll .cf-dapper-scrollbars--track-y{background-color:#d5d5dd !important}.graph-tips{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;display:inline-block;padding:0 4px;border:0;height:30px;line-height:30px}.graph-tips,.graph-tips:hover{cursor:default}.graph-tips>span{display:inline-block;text-align:center;width:17px;height:17px;border-radius:50%;background-color:#b9b9c5;color:#07070e;line-height:18px;font-weight:900;cursor:default}.graph-tips-line{display:grid;grid-template-columns:120px auto}.view-loading-spinner{position:absolute;z-index:9999;top:50%;left:50%;transform:translate(-50%, -50%);pointer-events:none}.view-loading-spinner--timer{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);font-weight:700;font-size:13px;transition:opacity .5s ease;width:50px;height:50px;border-radius:50%;background-color:rgba(7,7,14,.75);line-height:50px;text-align:center;opacity:0}.view-loading-spinner--timer.visible{opacity:1}.dashboard-empty{position:absolute;top:0;left:0;height:100%;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center}.dashboard-empty--graphic{display:inline-flex;position:relative;width:50%;max-width:720px}.dashboard-empty--graphic:after{content:\\\"\\\";display:inline-block;padding-bottom:57.3170731707%}.dashboard-empty--graphic-content{position:absolute;top:0;left:0;width:100%;height:100%;background-position:center center;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.clockface--app-wrapper.dashboard-light-mode .dashboard-empty--graphic-content{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.clockface--app-wrapper.dashboard-light-mode .dashboard-empty .cf-empty-state--text{color:#9e9ead}.clockface--app-wrapper.dashboard-light-mode .dashboard-empty .cf-empty-state--text strong,.clockface--app-wrapper.dashboard-light-mode .dashboard-empty .cf-empty-state--text b{color:#4d4d60}.markdown-cell .cf-dapper-scrollbars--track-y{background-color:#07070e !important}.markdown-cell--contents{padding:12px 26px;font-size:1.2em}.markdown-format{color:#b9b9c5}.markdown-format p{font-size:var(--step-0);line-height:1.55em;font-weight:400}.markdown-format h3:not(.cf-heading){font-size:var(--step-3);font-weight:600;line-height:1.25em;border-bottom:2px solid #1a1a2a;padding-bottom:.25em}.markdown-format h4:not(.cf-heading){font-size:var(--step-2);font-weight:600;line-height:1.25em;border-bottom:2px solid #1a1a2a;padding-bottom:.25em}.markdown-format h5:not(.cf-heading){font-size:var(--step-1);font-weight:600;line-height:1.25em}.markdown-format strong{font-weight:900;color:#d5d5dd}.markdown-format table:not(.cf-table){border-collapse:collapse}.markdown-format td:not(.cf-table--cell),.markdown-format th:not(.cf-table--header-cell){padding:4px 8px;border:2px solid #333346}.markdown-format th:not(.cf-table--header-cell){background-color:#333346}.markdown-format code{border-radius:1px;margin:0;padding:2px 6px;color:#dd84f1;letter-spacing:0;font-weight:700;background-color:#07070e}.markdown-format pre{border-radius:1px;padding:6px;background-color:#07070e}.markdown-format pre code{padding:0}.markdown-format img{border-radius:2px;max-width:100%}.markdown-format>*:first-child{margin-top:0}.markdown-format>*:last-child{margin-bottom:0}.wizard--bookend-step{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:100%}.wizard--bookend-step .button{position:relative;white-space:nowrap;margin:0 4px}.splash-logo{background-size:100% 100%;background-position:center center;background-repeat:no-repeat;width:100%;flex:.5}.splash-logo.primary{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.splash-logo.secondary{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \")}.splash-logo.secondary+h3{margin-top:32px}.wizard-contents{display:flex;align-items:stretch;flex-wrap:nowrap;border-radius:4px;background-color:#07070e;margin:32px;margin-top:4px;flex-grow:1;width:100%}.wizard-step--container{position:relative;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;background-color:#1a1a2a;border-radius:4px;padding:16px;flex:1 0 0}.side-bar.show+.wizard-step--container{flex:1 0 calc(100% - 240px)}.wizard-step--group{display:flex;justify-content:space-between;align-items:flex-end}.onboarding-step{flex:1 0 0;min-width:100%;text-align:center;position:relative;display:inline-flex;flex-direction:column;justify-content:flex-start;align-items:center}.onboarding-step .cf-form--wrapper{display:inline-flex;flex-direction:column;flex:1 0 0}.wizard-step--scroll-area{flex:1 0 0;width:100%}.wizard-step--scroll-content{width:90%;height:90%;margin:0 auto 32px auto;display:inline-flex;flex-direction:column;justify-content:center}.wizard-step--grid-container{width:90%;display:block;margin:0 auto}.wizard-step--grid-container_telegrafUiRefresh{width:98%;display:block}.wizard-step--filter{align-self:flex-end;margin-top:18px}.wizard--button-bar{display:inline-flex;flex-shrink:0;position:relative;justify-content:center;align-items:center;height:auto;flex-wrap:nowrap;flex:2;margin-top:8px}.wizard--button-bar .button{position:relative;white-space:nowrap;margin:0 4px}.wizard-step--footer{display:inline-flex;justify-content:center;align-items:center;border-radius:4px;height:50px;width:100%;margin-top:10px;background-color:#333346;text-align:center}.wizard-step--footer>label{font-size:small;color:#9e9ead;margin:10px}.wizard-step--footer.dropdown{justify-content:left;align-items:left;text-align:left;margin-bottom:8px}.wizard-step--title{font-size:32px;font-weight:300;color:#d5d5dd;margin-bottom:8px;justify-content:flex-start;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard-step--title,.wizard-step--title:hover{cursor:default}.wizard-step--sub-title{margin-top:8px;margin-bottom:32px;font-size:16px;font-weight:400;color:#9e9ead;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard-step--sub-title,.wizard-step--sub-title:hover{cursor:default}.wizard-step--sub-title a{color:#00a3ff}.wizard-step--body,.wizard-step--body-streaming{background-color:#07070e;color:#fff;padding:25px;width:100%;text-align:left;border-radius:4px}.wizard-step--body>h6,.wizard-step--body-streaming>h6{color:#d5d5dd}.wizard-step--body>p,.wizard-step--body-streaming>p{color:#9e9ead;padding-bottom:10px}.wizard-step--body-streaming{text-align:center;margin-top:4px}.wizard-step--text-state{text-align:center}.wizard-step--text-state.loading{color:#be2ee4}.wizard-step--text-state.success{color:#2fa74d}.wizard-step--text-state.error{color:#f95f53}.wizard-step--body-snippet{background-color:#1a1a2a;border-radius:4px;margin:4px 0;padding:8px;font-family:\\\"RobotoMono\\\",monospace}.wizard-step--body-copybutton{margin-left:10px}.wizard-step--lp-sub-title{margin-top:4px;margin-bottom:8px;font-size:16px;font-weight:400;color:#9e9ead;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard-step--lp-sub-title,.wizard-step--lp-sub-title:hover{cursor:default}.wizard-step--lp-sub-title a{color:#00a3ff}.wizard-step--lp-body{height:250px;flex-shrink:1;width:100%;margin:16px auto 0 auto}.wizard-step--top-container{width:100%;padding:40px;border-radius:4px;background-color:#07070e;transition:background-color .25s ease,border-color .25s ease}.wizard-step--sparkle-container{width:100%;height:250px}.wizard-step--retry-button{margin-top:20px}.wizard-step--lp-precision{display:inline-flex;justify-content:left;align-items:center;border-radius:4px;height:50px;width:100%;margin-top:4px;margin-bottom:4px;background-color:#333346;text-align:left;z-index:5001}.wizard-step--lp-precision>label{font-size:medium;color:#9e9ead;margin:10px}.wizard-step--lp-precision.dropdown{justify-content:left;align-items:left;text-align:left;margin-bottom:8px}.wizard-completion--options{font-size:16px}.wizard-completion--options .wizard-completion--option{margin:16px 0}.wizard-completion--options dt{margin:16px 0;font-weight:700;color:#d5d5dd}.wizard-completion--options dd{font-weight:400;color:#9e9ead}@media screen and (min-width: 1080px){.wizard-step--container{padding:32px}.onboarding-step{max-width:60vw}.buttonless .wizard-step--scroll-area{height:calc(100% - 32px)}.wizard--bookend-step{width:70%}}.protoboard-icon{position:relative;display:flex;justify-content:center;align-items:center}.protoboard-icon svg{width:60%}.protoboard-icon .protoboard-icon--shape{stroke:#00a3ff;stroke-width:2;fill:rgba(0,0,0,0)}.protoboard-icon .protoboard-icon--text-shape{stroke-width:2;stroke:#00a3ff;fill:#00a3ff}.protoboard-icon .protoboard-icon--text{fill:#07070e;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;font-weight:900;font-size:42px}.card-select--active:hover .protoboard-icon--text,.card-select--active.card-select--checked .protoboard-icon--text{fill:#333346}.cell--view-empty,.wizard--credits{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.cell--view-empty,.wizard--credits{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.import--options{display:flex;margin-top:-8px;margin-bottom:8px;justify-content:center}.import--dropdown{margin-top:8px}.version-info{color:#828294;text-align:center}@keyframes loading-dots{0%{content:\\\" \\\"}25%{content:\\\".\\\"}50%{content:\\\"..\\\"}75%{content:\\\"...\\\"}100%{content:\\\" \\\"}}.waiting-text::after{animation:2s linear loading-dots infinite;content:\\\"...\\\"}.react-grid-layout{position:relative;transition:height 200ms ease}.react-grid-item{z-index:1;transition:all 200ms ease;transition-property:left,top}.react-grid-item.cssTransforms{transition-property:transform}.react-grid-item.resizing{z-index:3;will-change:width,height}.react-grid-item.react-draggable-dragging{transition:none;z-index:3;will-change:top,left}.react-grid-item.react-grid-placeholder{background:#00a3ff;background:-moz-linear-gradient(135deg, #00a3ff 0%, #ce58eb 100%) !important;background:-webkit-linear-gradient(135deg, #00a3ff 0%, #ce58eb 100%) !important;background:linear-gradient(135deg, #00a3ff 0%, #ce58eb 100%) !important;filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 ) !important;border:0 !important;opacity:.3;border-radius:4px !important;transition-duration:100ms;z-index:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.react-resizable-handle{position:absolute;background-image:none;cursor:nwse-resize;border:15px solid rgba(0,0,0,0);border-right-color:#333346;border-bottom-color:#333346;border-bottom-right-radius:4px;z-index:5;transition:border-color .25s ease,opacity .25s ease;width:30px;height:30px;bottom:0;right:0;opacity:0}.react-resizable-handle:before,.react-resizable-handle:after{content:\\\"\\\";display:block;position:absolute;height:2px;border-radius:1px;background-color:#07070e;transition:background-color .25s ease;transform:translate(-50%, -50%) rotate(-45deg);border:0}.react-resizable-handle:before{width:12px;top:7px;left:7px}.react-resizable-handle:after{width:20px;top:4px;left:4px}.react-resizable-handle:hover{border-right-color:#ce58eb;border-bottom-color:#ce58eb}.cell:hover .react-resizable-handle{opacity:1}.react-grid-item.resizing .react-resizable-handle,.react-grid-item.react-draggable-dragging .react-resizable-handle{opacity:1;border-right-color:#ce58eb;border-bottom-color:#ce58eb}.cell--view-empty,.wizard--credits{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.cell--view-empty,.wizard--credits{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.cell--note-contents{padding:16px;font-size:13px}.cell{background-color:rgba(26,26,42,.5);border-radius:4px;display:flex;flex-direction:column;align-items:stretch;flex-wrap:nowrap}.cell--view{flex:1 0 0;position:relative;height:100%}.cell--view>.single-stat{border-radius:4px}.cell--view .time-series-container{padding-top:0}.empty-graph-error--copy{z-index:1;float:right}.cell--view-empty{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#68687b;overflow:hidden}.cell--view-empty.error{font-size:40px;color:#ff8564}.cell--error-message{white-space:normal}.dashboard .cell--view-empty{top:48px}.cell--header{display:flex;align-items:center;flex-wrap:nowrap;flex:0 0 32px}.cell--draggable{flex:0 0 32px;width:32px;height:32px;position:relative}.cell--dot-grid{position:absolute;width:2px;height:2px;top:50%;transform:translate(-50%, -50%)}.cell--dot-grid,.cell--dot-grid:before,.cell--dot-grid:after{border-radius:1px;background-color:#68687b;transition:background-color .25s ease}.cell--dot-grid:before,.cell--dot-grid:after{content:\\\"\\\";position:absolute;top:0;left:0;width:100%;height:100%}.cell--dot-grid:before{transform:translateY(-200%)}.cell--dot-grid:after{transform:translateY(200%)}.cell:hover .cell--dot-grid,.cell:hover .cell--dot-grid:before,.cell:hover .cell--dot-grid:after{background-color:#d5d5dd}.cell--dot-grid:nth-child(1){left:calc(50% - 4px)}.cell--dot-grid:nth-child(2){left:50%}.cell--dot-grid:nth-child(3){left:calc(50% + 4px)}.cell--draggable:hover{cursor:move}.cell--draggable:hover .cell--dot-grid,.cell--draggable:hover .cell--dot-grid:before,.cell--draggable:hover .cell--dot-grid:after{background-color:#00a3ff}.cell--context{flex:0 0 32px;width:32px;height:32px;border:0;outline:none;background:none;transition:color .25s ease,.25s opacity ease;color:#68687b;position:relative}.cell--context>.cf-icon{font-size:14px;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cell:hover .cell--context:not(.cell--context__active){color:#d5d5dd}.cell:hover .cell--context:hover,.cell--context.cell--context__active{cursor:pointer;color:#00a3ff}.cell--context-menu{padding:4px;display:flex;flex-direction:column;align-items:stretch}.cell--context-item{font-size:12px;line-height:12px;white-space:nowrap;padding:6px 8px;border-radius:3px;font-weight:600;transition:color .25s ease,background-color .25s ease}.cell--context-item>.cf-icon{margin-right:8px}.cell--context-item:hover{cursor:pointer;color:#fff;background-color:#333346}.cell--context-item__danger{color:#ff8564}.cell--context-item__danger:hover{color:#ffb6a0}.cell--context-item__confirm:hover{background-color:rgba(0,0,0,0)}.cell--name,.cell--window-period{flex:1 0 0;font-size:12px;line-height:12px;font-weight:600;padding-right:8px;pointer-events:none}.cell--window-period{text-align:right}.cell--note-indicator{position:relative;flex:0 0 32px;width:32px;height:32px;cursor:default;color:#68687b;transition:color .25s ease,opacity .25s ease}.cell--note-indicator>.cf-icon{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.cell:hover .cell--note-indicator:not(.cell--note-indicator__active){color:#d5d5dd}.cell--note-indicator.cell--note-indicator__active,.cell--note-indicator:hover,.cell:hover .cell--note-indicator:hover{cursor:pointer;color:#00a3ff}.time-series-container{width:100%;height:100%;padding:8px}.time-series-container.time-series-container--alert-check{padding-right:38px;padding-bottom:28px;overflow:hidden}.giraffe-tooltip-container{z-index:9993}.react-grid-item.resizing .cell--context,.react-grid-item.resizing .cell--note-indicator,.react-grid-item.react-draggable-dragging .cell--context,.react-grid-item.react-draggable-dragging .cell--note-indicator{opacity:0}.presentation-mode .cell--context{display:none}.dashboard-clonecell--dropdownopen{width:70% !important}.dashboard-clonecell--overlayopen{display:flex;flex-direction:column;align-items:center}.gradient-border{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000;transition:opacity .25s ease;opacity:0}.gradient-border--top-left,.gradient-border--top-right,.gradient-border--bottom-left,.gradient-border--bottom-right{position:absolute;width:50%;height:50%;z-index:1}.gradient-border--top-left:before,.gradient-border--top-left:after,.gradient-border--top-right:before,.gradient-border--top-right:after,.gradient-border--bottom-left:before,.gradient-border--bottom-left:after,.gradient-border--bottom-right:before,.gradient-border--bottom-right:after{content:\\\"\\\";position:absolute}.gradient-border--top-left{z-index:2;top:0;left:0;border-top-left-radius:4px;border-top:2px solid #00a3ff;border-left:2px solid #00a3ff}.gradient-border--top-left:before{top:-2px;height:2px;left:4px;width:calc(200% - 8px);background:#00a3ff;background:-moz-linear-gradient(left, #00a3ff 0%, #677ef5 100%);background:-webkit-linear-gradient(left, #00a3ff 0%, #677ef5 100%);background:linear-gradient(to right, #00a3ff 0%, #677ef5 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.gradient-border--top-left:after{top:4px;height:calc(200% - 8px);left:-2px;width:2px;background:#00a3ff;background:-moz-linear-gradient(top, #00a3ff 0%, #677ef5 100%);background:-webkit-linear-gradient(top, #00a3ff 0%, #677ef5 100%);background:linear-gradient(to bottom, #00a3ff 0%, #677ef5 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=0 )}.gradient-border--top-right{top:0;right:0;border-top-right-radius:4px;border-top:2px solid #677ef5;border-right:2px solid #677ef5}.gradient-border--bottom-left{bottom:0;left:0;border-bottom-left-radius:4px;border-bottom:2px solid #677ef5;border-left:2px solid #677ef5}.gradient-border--bottom-right{z-index:2;bottom:0;right:0;border-bottom-right-radius:4px;border-bottom:2px solid #ce58eb;border-right:2px solid #ce58eb}.gradient-border--bottom-right:before{bottom:-2px;height:2px;right:4px;width:calc(200% - 8px);background:#677ef5;background:-moz-linear-gradient(left, #677ef5 0%, #ce58eb 100%);background:-webkit-linear-gradient(left, #677ef5 0%, #ce58eb 100%);background:linear-gradient(to right, #677ef5 0%, #ce58eb 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.gradient-border--bottom-right:after{bottom:4px;height:calc(200% - 8px);right:-2px;width:2px;background:#677ef5;background:-moz-linear-gradient(top, #677ef5 0%, #ce58eb 100%);background:-webkit-linear-gradient(top, #677ef5 0%, #ce58eb 100%);background:linear-gradient(to bottom, #677ef5 0%, #ce58eb 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=0 )}.react-grid-item.resizing .gradient-border,.react-grid-item.react-draggable-dragging .gradient-border{opacity:1}.tabbed-page{display:flex;align-items:stretch;background-color:rgba(26,26,42,.25);border-radius:4px}.tabbed-page-nav{display:flex;flex-direction:column;align-items:stretch;flex:0 1 0;padding:32px;padding-right:0}.tabbed-page-nav--header{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;margin:32px;margin-left:0;display:flex;flex-direction:column;align-items:center;text-align:center}.tabbed-page-nav--header,.tabbed-page-nav--header:hover{cursor:default}.tabbed-page-nav--avatar{background-color:#1a1a2a}.tabbed-page-nav--description{font-weight:600;font-size:13px;line-height:15px;margin:0;margin-top:12px;color:#9e9ead}.tabbed-page-nav--tabs{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;display:flex;flex-direction:column;align-items:stretch}.tabbed-page-nav--tabs,.tabbed-page-nav--tabs:hover{cursor:default}.tabbed-page-nav--tab{border-radius:4px 0 0 4px;font-size:17px;height:50px;line-height:50px;padding:0 17px;color:#9e9ead;white-space:nowrap;transition:background-color .25s ease,color .25s ease}.tabbed-page-nav--tab:hover{background-color:rgba(26,26,42,.5);color:#d5d5dd;cursor:pointer}.tabbed-page-nav--tab.active{background-color:#1a1a2a;color:#f1f1f3}.tabbed-page-content{flex:1 0 0;background-color:#1a1a2a;border-radius:4px;min-height:500px;padding:32px}.tabbed-page-section--header{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px}.editable-description{height:22px;width:100%;margin-top:-3px}.editable-description--preview,.cf-input.editable-description--input>input{font-size:11px;font-weight:400;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;padding:0 5px}.editable-description--preview,.editable-description--input{position:relative;width:100%}.editable-description--preview{border-radius:4px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;color:#b9b9c5;transition:color .25s ease,background-color .25s ease,border-color .25s ease;border:2px solid rgba(0,0,0,0);height:22px;line-height:18px}.editable-description--preview,.editable-description--preview:hover{cursor:default}.editable-description--preview .cf-icon{position:relative;top:-2px;display:inline-block;margin-left:8px;opacity:0;transition:opacity .25s ease;color:#9e9ead}.editable-description--preview:hover .cf-icon{opacity:1}.editable-description--preview.untitled{color:#68687b;font-style:italic}.editable-description--preview:hover{cursor:text;color:#fff}.cf-input.editable-description--input>input::-webkit-input-placeholder{font-weight:400 !important}.cf-input.editable-description--input>input::-moz-placeholder{font-weight:400 !important}.cf-input.editable-description--input>input:-ms-input-placeholder{font-weight:400 !important}.cf-input.editable-description--input>input:-moz-placeholder{font-weight:400 !important}.range-picker{position:fixed;text-align:center;background-color:#07070e;border:2px solid #00a3ff;padding:8px;border-radius:4px;z-index:9999}.range-picker .react-datepicker{font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;font-size:15px}.range-picker .range-picker--date-pickers{flex-wrap:nowrap;display:flex;flex-direction:row;align-items:center;margin-bottom:8px}.range-picker .range-picker--date-pickers .range-picker--date-picker{margin:4px;margin-top:0}.range-picker .range-picker--date-pickers .range-picker--date-picker .react-datepicker-wrapper,.range-picker .range-picker--date-pickers .range-picker--date-picker .react-datepicker__input-container{width:100%}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar-container{position:relative}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar{background-color:rgba(0,0,0,0);border:none;color:#00a3ff;display:flex;flex-direction:row;align-items:stretch}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__month-container{background-color:#1a1a2a;border-radius:4px 4px;width:260px}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__navigation{outline:none;cursor:pointer}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__navigation--next{border-left-color:#f1f1f3}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__navigation--previous{border-right-color:#f1f1f3}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .range-picker--day{color:#4d4d60}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .range-picker--day:hover{background-color:#00c9ff;color:#fff}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .range-picker--day-in-month{color:#b9b9c5}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .range-picker--day-in-month:hover{background-color:#00c9ff;color:#fff}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__day--selected{background-color:#00a3ff;color:#f1f1f3}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__triangle{display:none}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__header{border-radius:0;padding:0;border:none;background:rgba(0,0,0,0)}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__header .react-datepicker__day-name{color:#2fa74d;font-weight:700}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__header .react-datepicker__current-month{width:100%;border-radius:4px 4px 0 0;background-color:#1a1a2a;color:#f1f1f3;font-weight:700;height:32px;display:inline-flex;flex-direction:row;justify-content:center;align-items:center}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container{width:70px;border:none;margin-left:2px;border-radius:4px;background-color:rgba(0,0,0,0);display:flex;flex-direction:column}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__header--time{width:100%;border-radius:4px 4px 0 0;background-color:#1a1a2a;font-weight:700;flex:0 0 32px;display:inline-flex;flex-direction:row;justify-content:center;align-items:center}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker-time__header{color:#f1f1f3}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time{flex:1 0 calc(100% - 32px);background-color:rgba(0,0,0,0)}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box{width:100%;height:100%;background-color:#1a1a2a;color:#b9b9c5;border-radius:0 0 4px 4px;position:relative}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list{position:absolute;width:100%;height:100%;font-size:12px}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar{width:4px;border-top-right-radius:2px;border-top-left-radius:2px;border-bottom-left-radius:2px;border-bottom-right-radius:2px}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar-button{background-color:#1a1a2a}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar-track{background-color:#1a1a2a;border-top-right-radius:2px;border-top-left-radius:2px;border-bottom-left-radius:2px;border-bottom-right-radius:2px}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar-track-piece{background-color:#1a1a2a}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar-thumb{background-color:#00a3ff;border-radius:2px}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-scrollbar-corner{background-color:#1a1a2a}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list::-webkit-resizer{background-color:#1a1a2a}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list .react-datepicker__time-list-item{height:initial;padding:4px 8px;transition:background-color .25s ease,color .25s ease;line-height:1.25em;margin:0}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list .react-datepicker__time-list-item:hover{background-color:#333346;color:#fff}.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list .react-datepicker__time-list-item--selected,.range-picker .range-picker--date-pickers .range-picker--date-picker .range-picker--calendar .react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box .react-datepicker__time-list .react-datepicker__time-list-item--selected:hover{background-color:#00a3ff}.range-picker--submit{margin-bottom:8px}.range-picker--dismiss{position:absolute;z-index:5000;top:0;right:0;transform:translate(50%, -50%);width:24px;height:24px;outline:none;border-radius:50%;background-color:#00a3ff;transition:background-color .25s ease;border:0}.range-picker--dismiss:before,.range-picker--dismiss:after{content:\\\"\\\";position:absolute;width:13px;height:3px;top:50%;left:50%;border-radius:1px;background-color:#fff}.range-picker--dismiss:before{transform:translate(-50%, -50%) rotate(45deg)}.range-picker--dismiss:after{transform:translate(-50%, -50%) rotate(-45deg)}.range-picker--dismiss:hover{background-color:#00c9ff;cursor:pointer}.inline-labels{width:100%}.inline-labels--container{width:calc(100% + 2px);position:relative;left:-2px;display:flex;flex-wrap:wrap;padding:1px;column-gap:4px;row-gap:4px}.inline-labels--container>.cf-label{margin:1px}.cf-button.cf-button-sm.inline-labels--add{width:18px;height:18px;margin:1px;position:relative}.cf-button.cf-button-sm.inline-labels--add,.cf-button.cf-button-sm.inline-labels--add:after{border-radius:50%}.cf-button.cf-button-sm.inline-labels--add:after{top:50%;left:50%;transform:translate(-50%, -50%);transition:opacity .25s ease,transform .25s ease}.cf-button.cf-button-sm.inline-labels--add:hover:after{transform:translate(-50%, -50%) scale(1.5, 1.5)}.inline-labels--add-icon{position:absolute;width:100%;height:100%;top:0;left:0}.inline-labels--add-icon:before,.inline-labels--add-icon:after{content:\\\"\\\";position:absolute;top:50%;left:50%;height:2px;width:9px;background-color:#fff;border-radius:1px;transition:width .25s ease}.inline-labels--add-icon:before{transform:translate(-50%, -50%)}.inline-labels--add-icon:after{transform:translate(-50%, -50%) rotate(90deg)}.cf-button.cf-button-sm.inline-labels--add:hover .inline-labels--add-icon:before,.cf-button.cf-button-sm.inline-labels--add:hover .inline-labels--add-icon:after{width:13px}.inline-labels--editor{min-height:18px;position:relative;display:flex;align-items:center;column-gap:4px;row-gap:4px}.inline-labels--add-wrapper{display:flex}.inline-labels--popover{width:330px}.inline-labels--popover-heading{margin-top:0;user-select:none;text-align:center;color:#b9b9c5;margin-bottom:16px}.inline-labels--list-container{background-color:#1a1a2a;border-radius:4px;margin-top:4px;overflow:hidden}.inline-labels--list{display:flex;width:100%;flex-direction:column;align-items:stretch}.inline-labels--list-item,.inline-labels--create-new{padding:4px 8px;min-height:40px;font-size:var(--step-0);display:flex;align-items:center}.inline-labels--list-item.active{background-color:#00a3ff}.inline-labels--list-item.active,.inline-labels--list-item:hover{cursor:pointer}.inline-labels--create-new{line-height:var(--step-0);font-weight:600;color:#9e9ead;transition:background-color .25s ease,color .25s ease;white-space:pre-wrap;word-break:break-all;word-wrap:break-word}.inline-labels--create-new strong{display:inline;font-weight:700;color:#d5d5dd}.inline-labels--create-new.active{color:#bef0ff}.inline-labels--create-new.active strong{color:#fff}.input-tag-list{margin:1px -1px;display:flex;flex-wrap:wrap}.tag-input+.input-tag-list{padding:0 11px;margin:4px -1px}.input-tag--item,.tags-add{height:24px;line-height:24px;border-radius:3px;margin:1px}.input-tag--item{display:flex;align-items:center;flex-wrap:nowrap;white-space:nowrap;padding:0 0 0 9px;font-size:12px;font-weight:600;background-color:#333346;color:#f1f1f3;cursor:default}.btn.confirm-button.input-tag--remove{margin-left:2px;color:#68687b;background-color:rgba(0,0,0,0)}.btn.confirm-button.input-tag--remove:hover{background-color:rgba(0,0,0,0);color:#ff8564}.tags-add{position:relative;width:24px;background-color:#00a3ff;color:#fff;text-align:center;transition:background-color .25s ease}.tags-add .cf-icon{font-size:14px}.tags-add:hover,.tags-add.open{cursor:pointer;background-color:#00c9ff}.tags-add--menu{position:absolute;top:100%;left:0;z-index:99;display:none;flex-direction:column;align-items:stretch;border-radius:4px;overflow:auto;max-height:200px;background:#066fc5;background:-moz-linear-gradient(left, #066fc5 0%, #00a3ff 100%);background:-webkit-linear-gradient(left, #066fc5 0%, #00a3ff 100%);background:linear-gradient(to right, #066fc5 0%, #00a3ff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.tags-add--menu-item{text-align:left;font-size:13px;line-height:13px;font-weight:500;padding:7px 9px;white-space:nowrap;color:#f0fcff;transition:color .25s ease;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.tags-add--menu-item,.tags-add--menu-item:hover{cursor:default}.tags-add--menu-item:hover{cursor:pointer;color:#fff;background:#00c9ff;background:-moz-linear-gradient(left, #00c9ff 0%, #00a3ff 100%);background:-webkit-linear-gradient(left, #00c9ff 0%, #00a3ff 100%);background:linear-gradient(to right, #00c9ff 0%, #00a3ff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.tags-add--menu-item:active,.tags-add--menu-item:active:focus{cursor:pointer;color:#fff;background:#0b3a8d;background:-moz-linear-gradient(left, #0b3a8d 0%, #00a3ff 100%);background:-webkit-linear-gradient(left, #0b3a8d 0%, #00a3ff 100%);background:linear-gradient(to right, #0b3a8d 0%, #00a3ff 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.tags-add.open .tags-add--menu{display:flex}.color-scheme-dropdown-item{display:flex;justify-content:flex-start;align-items:center}.color-scheme-dropdown-item--swatches{width:90px;height:8px;border-radius:4px;margin-right:10px}.editable-name>a,.cf-input.editable-name--input>input{font-size:17px;font-weight:600;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;padding:0 6px}.editable-name>a{white-space:nowrap;line-height:17px;padding-left:8px;padding-right:0}.editable-name{height:22px;position:relative;display:inline-block}.editable-name--toggle{font-size:12.75px;transform:translateY(-10%);padding:4px;display:inline-block;margin-left:8px;transition:color .25s ease,opacity .25s ease;opacity:1;color:#9e9ead}.editable-name--toggle:hover{cursor:pointer;color:#d5d5dd}.cf-input.editable-name--input{position:absolute;top:-1px;left:0;width:100%}.cf-input.editable-name--input>input::-webkit-input-placeholder{font-weight:600 !important}.cf-input.editable-name--input>input::-moz-placeholder{font-weight:600 !important}.cf-input.editable-name--input>input:-ms-input-placeholder{font-weight:600 !important}.cf-input.editable-name--input>input:-moz-placeholder{font-weight:600 !important}.index-list--row .editable-name--toggle{opacity:0}.index-list--row:hover .editable-name--toggle{opacity:1}.drag-and-drop{border:2px dashed #333346;border-radius:3px;width:100%;height:100%;transition:background-color .25s ease,border-color .25s ease;align-content:center;align-items:center;justify-content:center}.drag-and-drop--form{position:relative;z-index:5000;background-color:#07070e;display:flex;align-items:center;flex-direction:column;justify-content:center;padding:30px 18px;color:#333346;width:100%;height:100%}input[type=file].drag-and-drop--input{display:none}.drag-and-drop--graphic{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \");background-size:100% 100%;background-position:center center;width:90px;height:90px;color:#333346}.drag-and-drop--graphic.success{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \")}.drag-and-drop--header{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;width:100%;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 0 15px 0;font-size:20px;font-weight:400}.drag-and-drop--header,.drag-and-drop--header:hover{cursor:default}.drag-and-drop--header.empty{color:#68687b}.drag-and-drop--header.selected{color:#2fa74d}.drag-and-drop--header.error{color:#dc4e58}.drag-and-drop--buttons{display:flex;align-items:center;flex-wrap:nowrap;margin-top:18px}.drag-and-drop--buttons>button{margin:0 4px}.drag-and-drop--form.active:hover,.drag-and-drop.drag-over .drag-and-drop--form{cursor:pointer;background-color:#1a1a2a;border-color:#333346}.drag-and-drop.compact .drag-and-drop--form{flex-direction:row}.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--graphic,.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--buttons{position:absolute;top:50%;transform:translateY(-50%)}.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--graphic{left:20px;width:50px;height:50px}.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--header{font-size:15px;margin-bottom:0;margin-right:80px;margin-left:80px;word-break:break-all;white-space:pre-wrap}.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--buttons{margin-top:0;right:20px;flex-direction:column;align-items:stretch}.drag-and-drop.compact .drag-and-drop--form .drag-and-drop--buttons>button{margin:2px 0}.page-not-found>.page-not-found-funnel{display:flex;flex-direction:column}.page-not-found>.page-not-found-funnel .page-not-found-content{padding:10px;color:#fff}.page-not-found>.page-not-found-funnel .page-not-found-content>.page-not-found-content-highlight{margin:20px}.page-not-found>.page-not-found-footer{display:flex;height:60%;background-color:#fff;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_5___ + \");background-repeat:no-repeat;background-position:center center;background-size:auto 100%}.page-not-found>.page-not-found-footer>.page-not-found-panel{top:-20%;width:660px;margin:0 auto;z-index:10}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content{padding:40px 50px}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content>.page-not-found-panel-section{margin:10px}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content>.page-not-found-panel-section>.page-not-found-panel-title{font-weight:bold;margin:5px 0}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content .page-not-found-community-links{display:flex;margin:10px;align-items:center}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content .page-not-found-community-links>a{margin:0 5px}.page-not-found>.page-not-found-footer>.page-not-found-panel>.page-not-found-panel-content .page-not-found-community-links>.slack-icon{display:inline-block;width:14px;height:14px;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_6___ + \");background-repeat:no-repeat;background-size:cover}.searchable-dropdown--input-container{width:100%;padding:8px 0;border-bottom:2px solid #333346}.box-tooltip{position:fixed;visibility:hidden;z-index:9993}.box-tooltip--contents{border-width:2px;border-style:solid;background-color:#07070e;border-radius:4px;padding:10px;font-size:13px;word-break:break-all;word-wrap:break-word;width:calc(100% - 12px)}.box-tooltip--contents pre{word-break:break-all;word-wrap:break-word;white-space:pre-wrap}.box-tooltip__primary .box-tooltip--contents{border-color:#00a3ff}.box-tooltip__primary.right .box-tooltip--caret{border-right-color:#00a3ff}.box-tooltip__primary.left .box-tooltip--caret{border-left-color:#00a3ff}.box-tooltip__danger .box-tooltip--contents{border-color:#ff8564}.box-tooltip__danger.right .box-tooltip--caret{border-right-color:#ff8564}.box-tooltip__danger.left .box-tooltip--caret{border-left-color:#ff8564}.box-tooltip--caret{position:absolute;width:0;height:0;border:6px solid rgba(0,0,0,0);transform:translate(0, -50%)}.box-tooltip--caret-container{position:absolute;top:0;width:12px;height:100%}.box-tooltip.left .box-tooltip--contents{margin-right:12px}.box-tooltip.left .box-tooltip--caret-container{right:0}.box-tooltip.left .box-tooltip--caret{left:0}.box-tooltip.right .box-tooltip--contents{margin-left:12px}.box-tooltip.right .box-tooltip--caret-container{left:0}.box-tooltip.right .box-tooltip--caret{right:0}.tooltip--link{padding-bottom:10px}.autorefresh-dropdown{display:flex;flex-wrap:nowrap}.autorefresh-dropdown.paused .cf-dropdown--selected{opacity:0}.autorefresh-dropdown--pause{margin-left:4px}.selector-list--list{display:flex;flex:1 1 0;flex-wrap:nowrap;height:100%}.selector-list--list>*{margin-left:4px;margin-right:4px}.selector-list--list>*:first-child{margin-left:0}.selector-list--list>*:last-child{margin-right:0}.selector-list{border-radius:4px;background-color:#1a1a2a;overflow:hidden;display:flex;flex-direction:column;align-items:stretch;position:relative;flex:0 0 228px}.selector-list--header{background-color:#333346;display:flex;justify-content:flex-start}.selector-list--title{display:inline-block;font-weight:900;font-size:13px;text-transform:uppercase;letter-spacing:0;color:#9e9ead}.selector-list--delete{flex:0 0 30px;height:30px;position:relative}.selector-list--delete:before,.selector-list--delete:after{content:\\\"\\\";position:absolute;top:50%;left:50%;width:14px;height:2px;border-radius:1px;background-color:#68687b;transition:background-color .25s ease}.selector-list--delete:before{transform:translate(-50%, -50%) rotate(45deg)}.selector-list--delete:after{transform:translate(-50%, -50%) rotate(-45deg)}.selector-list--delete:hover{cursor:pointer}.selector-list--delete:hover:before,.selector-list--delete:hover:after{background-color:#ff8564}.selector-list--hamburger{flex:0 0 15px;height:2px;border-radius:1px;background-color:#4d4d60;margin-left:10px;position:relative;transition:background-color .25s ease}.selector-list--hamburger:before,.selector-list--hamburger:after{content:\\\"\\\";position:absolute;top:0;width:100%;height:100%;background-color:#4d4d60;border-radius:1px;transition:background-color .25s ease}.selector-list--hamburger:before{transform:translateY(-200%)}.selector-list--hamburger:after{transform:translateY(200%)}.selector-list--draggable{display:flex;align-items:center;height:30px;flex:1 0 0}.selector-list--draggable .selector-list--title{margin-left:8px;transition:color .25s ease}.selector-list--draggable:hover{cursor:grab}.selector-list--draggable:hover .selector-list--title{color:#d5d5dd}.selector-list--draggable:hover .selector-list--hamburger,.selector-list--draggable:hover .selector-list--hamburger:before,.selector-list--draggable:hover .selector-list--hamburger:after{background-color:#d5d5dd}.selector-list--menu{border-bottom:2px solid #333346;padding:8px}.selector-list--body{flex:1 1 0;overflow:hidden}.selector-list--empty{display:flex;flex-direction:column;text-align:center;align-items:center;justify-content:center;align-content:center;color:#68687b}.selector-list--empty>*{margin:4px 0}.selector-list--contents{padding:8px}.code-snippet{border-radius:2px;overflow:hidden;border:2px solid #1a1a2a;margin-bottom:8px}.code-snippet--scroll{min-height:26px !important;max-height:350px;border-radius:1px;overflow:hidden}.code-snippet--text{font-size:var(--step-1);color:#dd84f1;font-family:\\\"Roboto Mono\\\",monospace;border-radius:2px;background-color:#07070e}.code-snippet--text pre{display:inline-block;white-space:pre-wrap;padding:8px 16px}.code-snippet--text pre,.code-snippet--text code{word-wrap:break-word;word-break:break-all}.new-token--btn{margin:4px 16px}.code-snippet--footer{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;border-top:2px solid #1a1a2a;background-color:#1a1a2a}.code-snippet--label{font-size:var(--step-0);color:#9e9ead;margin:0}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.tag-selector-count{flex:0 0 30px;height:30px;background-color:#07070e;border-radius:50%;text-align:center;line-height:30px;font-weight:900;user-select:none;color:#00a3ff;font-size:13px}.retention--radio{margin-bottom:8px}.bucket-add-data{display:flex;flex-direction:column;align-items:stretch}.bucket-add-data--option{border-radius:4px;background-color:#1a1a2a;margin-bottom:4px;padding:16px;transition:background-color .25s ease}.bucket-add-data--option-header,.bucket-add-data--option-desc{transition:color .25s ease;user-select:none}.bucket-add-data--option-header{font-size:14px;font-weight:600;margin-bottom:12px;color:#b9b9c5}.bucket-add-data--option-desc{font-size:13px;font-weight:500;color:#9e9ead}.bucket-add-data--option:hover{cursor:pointer;background-color:#333346}.bucket-add-data--option:hover .bucket-add-data--option-header{color:#f1f1f3}.bucket-add-data--option:hover .bucket-add-data--option-desc{color:#b9b9c5}.system-bucket{color:#90c88a}.no-buckets-warning{margin-bottom:16px}.config-overlay{height:calc(100vh - 350px);width:100%;position:relative;display:inline-flex;flex-direction:column}.overlay-flux-editor{position:relative;height:300px}.overlay-flux-editor--spacing{margin-bottom:16px}.variable-dropdown{display:flex;flex-direction:row;align-items:center;border-radius:2px;background-color:#333346;margin-right:2px;margin-top:6px}.variable-dropdown .select__input-container{color:#fff}.variable-dropdown__dragging{border-color:#ce58eb;box-shadow:0 0 4px 1px #8e1fc3}.variable-dropdown__dragging+.variable-dropdown{pointer-events:none}.variable-dropdown--label{user-select:none;line-height:30px;font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;background-attachment:fixed;display:flex}.variable-dropdown--label>span{display:inline-block;padding:0 9px;padding-left:7px;color:#ce58eb;transition:color .25s ease}.variable-dropdown__dragging .variable-dropdown--label>span{color:#ebadf8}.variable-dropdown--drag{display:inline-block;width:20px;height:30px;position:relative;opacity:1}.variable-dropdown--drag .hamburger{width:10px;height:2px;border-radius:1px;position:absolute;top:50%;right:0;background-color:#be2ee4;transition:background-color .25s ease;transform:translate(0, -50%)}.variable-dropdown--drag .hamburger:before,.variable-dropdown--drag .hamburger:after{content:\\\"\\\";position:absolute;display:block;width:100%;height:100%;background-color:#be2ee4;transition:background-color .25s ease;border-radius:1px;left:0}.variable-dropdown--drag .hamburger:before{top:-4px}.variable-dropdown--drag .hamburger:after{top:4px}.variable-dropdown--drag:hover .hamburger,.variable-dropdown--drag:hover .hamburger:before,.variable-dropdown--drag:hover .hamburger:after{background-color:#ebadf8}.variable-dropdown__dragging .variable-dropdown--drag .hamburger,.variable-dropdown__dragging .variable-dropdown--drag .hamburger:before,.variable-dropdown__dragging .variable-dropdown--drag .hamburger:after{background-color:#ebadf8}.variable-dropdown--item{font-family:\\\"Roboto Mono\\\",monospace}.task-form{height:calc(100% - 32px);display:flex;align-items:stretch;background-color:#1a1a2a;border-radius:4px}.task-form--options{flex:1 0 140px;padding:32px;border-right:2px solid #4d4d60}.task-form--editor{position:relative;flex:6 0 0;border-radius:0 4px 4px 0}.task-form--form-label{height:30px;line-height:30px;font-size:13px;font-weight:600;color:#9e9ead;flex:1 0 60px;padding-left:11px}.bread-crumb-title{margin-right:10px}.pointer{cursor:pointer}.hidden-tasks-alert{font-size:13px;font-weight:600;margin-top:1px;width:100%;background-color:rgba(26,26,42,.5);text-align:center;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;color:#68687b;padding:8px;border-radius:4px;font-style:italic}.hidden-tasks-alert,.hidden-tasks-alert:hover{cursor:default}.task-header--cta{font-size:16px}.run-logs--list{width:100%;max-width:calc(100% - 60px) !important;height:100%}.run-logs--list-time{white-space:nowrap}.run-logs--list-message{white-space:pre-wrap;word-break:break-all}.run-logs--list-flux{position:relative;white-space:pre-wrap;word-break:break-all;width:100%;height:30vh}@supports(-moz-appearance: none){tr.run-log--list-row td{height:100%}}tr.run-log--list-row{height:30vh}.hidden-tasks-alert{font-size:13px;font-weight:600;margin-top:1px;width:100%;background-color:rgba(26,26,42,.5);text-align:center;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;color:#68687b;padding:8px;border-radius:4px;font-style:italic}.hidden-tasks-alert,.hidden-tasks-alert:hover{cursor:default}.task-header--cta{font-size:16px}.label-overlay--preview{display:flex;justify-content:center;align-items:center;height:90px}.label-overlay--preview>.label{margin:4px 0}.save-as--options{display:flex;margin-top:-10px;justify-content:center}.data-explorer{width:100%;height:100%;padding-bottom:16px;display:flex;align-items:stretch}.save-as--options{display:flex;margin-top:-10px;justify-content:center}.veo{width:calc(100vw - 64px);height:calc(100vh - 32px);margin:0 auto;display:flex;flex-direction:column;align-items:stretch;border-radius:0 0 2px 2px;background-color:#07070e}.veo .cf-page-header--fluid,.veo .veo-contents{padding-left:32px;padding-right:32px}.veo-contents{display:flex;align-items:stretch;width:100%;flex:1 0 0;padding-bottom:16px}.veo-overlay .overlay--transition{height:100%}.note-editor{display:flex;flex-direction:column}.note-editor--body{flex:1 1 40vh;position:relative;display:flex;align-items:stretch}.note-editor--editor,.note-editor--preview{position:absolute;width:calc(50% - 4px);height:100%}.note-editor--editor{left:0}.note-editor--editor .markdown-editor--monaco{height:100%}.note-editor--preview{right:0;background-color:#1a1a2a;border-width:2px;border-style:solid;border-radius:4px;border-color:#1a1a2a}.note-editor--preview-scroll{position:absolute !important}.note-editor--markdown-container{padding:16px}.note-editor--controls{margin-bottom:16px;display:flex;justify-content:space-between;align-items:center}.note-editor--radio{width:220px}.note-editor--helper{font-size:13px;font-weight:600;color:#9e9ead}.variables-control-bar .toolbar--contents{padding:0}.variables-control-bar--grid{border-radius:2px;padding:8px;width:100%;display:flex;transition:box-shadow .25s ease;flex-wrap:wrap}.variables-control-bar--grid__dragging-over{box-shadow:0 0 4px 1px #5c10a0}.alerts-activity{width:100%;height:350px;padding-top:20px;overflow:hidden}.getting-started{margin:8px 0;display:grid;grid-template-rows:270px 270px 270px;grid-template-columns:1fr;grid-row-gap:8px;grid-column-gap:8px}.getting-started--card-digit{position:absolute;top:8px;left:8px;width:24px;height:24px;background-color:#07070e;color:#67d74e;border-radius:50%;font-size:12px;line-height:24px;font-weight:700;text-align:center;user-select:none}.getting-started--card{width:100%;height:100%;border:2px solid #1a1a2a}.getting-started--card .cf-panel--body,.getting-started--card .cf-panel--footer{position:absolute;display:flex;align-content:center;justify-content:center;align-items:center}.getting-started--card .cf-panel--body{top:0;left:0;height:calc(100% - 80px)}.getting-started--card .cf-panel--footer{top:calc(100% - 80px);left:0;height:80px}.getting-started--card.highlighted{border-color:#0b3a8d}.getting-started--card.highlighted .getting-started--card-digit{background-color:rgba(7,7,14,.5)}.getting-started--image{width:100%;height:100%;background-size:cover}.getting-started--image>svg{width:100%;height:100%}@media screen and (min-width: 750px){.getting-started{grid-template-columns:1fr 1fr;grid-template-rows:260px 260px}}@media screen and (min-width: 1080px){.getting-started{grid-row-gap:0;grid-template-columns:1fr 1fr 1fr;grid-template-rows:320px}}.explore-graphic--bg{fill:#07070e}.explore-graphic--hex{fill:#1a1a2a;transition:fill .25s ease}.hex-a{fill:#00a3ff}.hex-b{fill:#67d74e}.explore-graphic--text{stroke:rgba(0,0,0,0);fill:none;transition:stroke .5s ease}.explore-graphic--diagnostic{fill:rgba(0,0,0,0);transition:fill .5s ease}@keyframes flow{0%{stroke-dashoffset:0px}100%{stroke-dashoffset:8px}}.explore-graphic--flow{fill:none;stroke-width:2px;stroke-dasharray:4px;stroke-dashoffset:0px}.flow-a{stroke:#67d74e}.flow-b{stroke:#00a3ff;animation-direction:reverse}.getting-started--image__animating .explore-graphic--hex{fill:#333346}.getting-started--image__animating .explore-graphic--text{stroke:#b9b9c5}.getting-started--image__animating .hex-a,.getting-started--image__animating .diagnostic-a{fill:#00a3ff}.getting-started--image__animating .hex-b,.getting-started--image__animating .diagnostic-b{fill:#67d74e}.getting-started--image__animating .explore-graphic--flow{animation:flow 1s linear infinite}.dashboarding-graphic--bg{fill:#07070e}.dashboarding-graphic--cell{fill:#1a1a2a;transition:fill .25s ease}.dashboarding-graphic--single-stat{fill:#333346}.dashboarding-graphic--axes{stroke-width:1.5px;stroke:#333346;fill:rgba(0,0,0,0);transition:fill .5s ease,stroke .5s ease;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}.dashboarding-graphic--line{fill:none;stroke-width:1.5px;stroke:#333346;transition:stroke .5s ease;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10}.dashboarding-graphic--bar{fill:#00a3ff}.bar-a{height:15.2px}.bar-b{height:32.2px}.bar-c{height:25.8px}.bar-d{height:4px}.bar-e{height:2px}.bar-f{height:7.6px}.bar-g{height:4px}@keyframes barGraphA{0%{height:15.2px}50%{height:18.2px}100%{height:15.2px}}@keyframes barGraphB{0%{height:32.2px}50%{height:35.2px}100%{height:32.2px}}@keyframes barGraphC{0%{height:25.8px}50%{height:28.8px}100%{height:25.8px}}@keyframes barGraphDG{0%{height:4px}50%{height:7px}100%{height:4px}}@keyframes barGraphE{0%{height:2px}50%{height:5px}100%{height:2px}}@keyframes barGraphF{0%{height:7.6px}50%{height:10.6px}100%{height:7.6px}}.single-stat-a{fill:#00a3ff}.single-stat-b{fill:#ff8564}.single-stat-c{fill:#67d74e}.single-stat-d{fill:#ce58eb}.table-a{fill:#00a3ff}.table-b{fill:#ce58eb}@keyframes tableCellA{0%{fill:#00a3ff}30%{fill:rgba(0,0,0,0)}70%{fill:rgba(0,0,0,0)}100%{fill:#00a3ff}}@keyframes tableCellB{0%{fill:#ce58eb}30%{fill:rgba(0,0,0,0)}70%{fill:rgba(0,0,0,0)}100%{fill:#ce58eb}}.line-a,.line-b,.line-c,.line-d{transition:all .5s ease}.line-a{stroke:#67d74e;stroke-dasharray:122;stroke-dashoffset:0}@keyframes graphLineA{0%{stroke-dashoffset:0}50%{stroke-dashoffset:122}100%{stroke-dashoffset:244}}.line-b{stroke:#00a3ff;stroke-dasharray:161;stroke-dashoffset:0}@keyframes graphLineB{0%{stroke-dashoffset:0}50%{stroke-dashoffset:161}100%{stroke-dashoffset:322}}.line-c{stroke:#ce58eb;stroke-dasharray:102;stroke-dashoffset:0}@keyframes graphLineC{0%{stroke-dashoffset:0}50%{stroke-dashoffset:102}100%{stroke-dashoffset:204}}.line-d{stroke:#ffd255;stroke-dasharray:99;stroke-dashoffset:0}@keyframes graphLineD{0%{stroke-dashoffset:0}50%{stroke-dashoffset:99}100%{stroke-dashoffset:198}}.getting-started--image__animating .dashboarding-graphic--cell{fill:#333346}.getting-started--image__animating .dashboarding-graphic--axes{stroke:#4d4d60}.getting-started--image__animating .line-a,.getting-started--image__animating .line-b,.getting-started--image__animating .line-c,.getting-started--image__animating .line-d{animation-iteration-count:infinite;animation-duration:1.5s;animation-direction:reverse}.getting-started--image__animating .line-a{animation-name:graphLineA}.getting-started--image__animating .line-b{animation-name:graphLineB;animation-delay:.2s}.getting-started--image__animating .line-c{animation-name:graphLineC;animation-delay:.2s}.getting-started--image__animating .line-d{animation-name:graphLineD}.getting-started--image__animating .bar-a,.getting-started--image__animating .bar-b,.getting-started--image__animating .bar-c,.getting-started--image__animating .bar-d,.getting-started--image__animating .bar-e,.getting-started--image__animating .bar-f,.getting-started--image__animating .bar-g{animation-iteration-count:infinite;animation-duration:.5s}.getting-started--image__animating .bar-a{animation-name:barGraphA;animation-delay:0s}.getting-started--image__animating .bar-b{animation-name:barGraphB;animation-delay:.15s}.getting-started--image__animating .bar-c{animation-name:barGraphC;animation-delay:.3s}.getting-started--image__animating .bar-d{animation-name:barGraphDG;animation-delay:.45s}.getting-started--image__animating .bar-e{animation-name:barGraphE;animation-delay:.6s}.getting-started--image__animating .bar-f{animation-name:barGraphF;animation-delay:.75s}.getting-started--image__animating .bar-g{animation-name:barGraphDG;animation-delay:.9s}.getting-started--image__animating .table-a,.getting-started--image__animating .table-b{animation-iteration-count:infinite;animation-duration:1.5s}.getting-started--image__animating .table-a{animation-name:tableCellA}.getting-started--image__animating .table-b{animation-name:tableCellB;animation-delay:.2s}.collector-graphic--bg{fill:#441d9a}.collector-graphic--bucket{fill:#bef0ff;transition:fill .4s ease}.collector-graphic--bucket-hole{fill:#00c9ff;transition:fill .4s ease}.collector-graphic--cubo{transform:rotate(17deg)}.collector-graphic--data{fill:none;stroke-width:2px;stroke-linecap:round;stroke-miterlimit:10}.data-a,.data-b,.data-c,.data-d,.data-e{stroke-width:2px}.dot-a{fill:#2fa74d}.dot-b{fill:#ffd255}.dot-c{fill:#00a3ff}.dot-d{fill:#ce58eb}.dot-e{fill:#ff8564}.data-a{stroke:#2fa74d;stroke-dasharray:146;stroke-dashoffset:0}.data-b{stroke:#ffd255;stroke-dasharray:102;stroke-dashoffset:0}.data-c{stroke:#00a3ff;stroke-dasharray:81;stroke-dashoffset:0}.data-d{stroke:#ce58eb;stroke-dasharray:102;stroke-dashoffset:0}.data-e{stroke:#ff8564;stroke-dasharray:146;stroke-dashoffset:0}@keyframes dataOuterFlow{0%{stroke-dashoffset:0}50%{stroke-dashoffset:146}100%{stroke-dashoffset:292}}@keyframes dataInnerFlow{0%{stroke-dashoffset:0}50%{stroke-dashoffset:102}100%{stroke-dashoffset:204}}@keyframes dataCenterFlow{0%{stroke-dashoffset:0}50%{stroke-dashoffset:81}100%{stroke-dashoffset:162}}.collector-graphic--cubo{transform-origin:161px 161.6px}.collector-graphic--cubo-line{transition:stroke .25s ease;stroke-width:1.5px;stroke:#5c10a0;fill:none}.getting-started--image__animating .collector-graphic--bucket{fill:#fff}.getting-started--image__animating .collector-graphic--bucket-hole{fill:#bef0ff}.getting-started--image__animating .collector-graphic--cubo-line{stroke:#be2ee4}.getting-started--image__animating .data-a,.getting-started--image__animating .data-b,.getting-started--image__animating .data-c,.getting-started--image__animating .data-d,.getting-started--image__animating .data-e{animation-iteration-count:infinite;animation-duration:1s;animation-direction:reverse}.getting-started--image__animating .data-a{animation-name:dataOuterFlow;animation-delay:0s}.getting-started--image__animating .data-b{animation-name:dataInnerFlow;animation-delay:.1s}.getting-started--image__animating .data-c{animation-name:dataCenterFlow;animation-delay:.2s}.getting-started--image__animating .data-d{animation-name:dataInnerFlow;animation-delay:.3s}.getting-started--image__animating .data-e{animation-name:dataOuterFlow;animation-delay:.4s}.renamable-page-title{width:100%;max-width:850px;position:relative;height:48px;font-size:var(--step-0)}.renamable-page-title:hover,.renamable-page-title:hover *{cursor:text}.renamable-page-title>.cf-heading.cf-page--title,.cf-input.renamable-page-title--input>input{font-size:2.4em;font-weight:500;font-family:\\\"Proxima Nova\\\",Helvetica,Arial,Tahoma,Verdana,sans-serif;padding:0 0;height:48px;letter-spacing:0}.renamable-page-title>.cf-heading.cf-page--title,.renamable-page-title--input{position:absolute;top:0;width:calc(\\n 100% + 4px\\n ) !important;left:-2px}.cf-input-sm.renamable-page-title--input{height:48px;font-size:var(--step-0)}.renamable-page-title>.cf-heading.cf-page--title{border-radius:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;user-select:none;transition:color .25s ease,background-color .25s ease,border-color .25s ease;line-height:44px;border:2px solid rgba(0,0,0,0)}.renamable-page-title.untitled>.cf-heading.cf-page--title{color:#68687b;font-style:italic}.renamable-page-title:hover>.cf-heading.cf-page--title{color:#fff;border-color:#1a1a2a}.renamable-page-title--icon{position:absolute;font-size:1.5em;top:50%;right:24px;transform:translate(50%, -50%);opacity:0;transition:opacity .25s ease;color:#9e9ead}.renamable-page-title:hover .renamable-page-title--icon{opacity:1}.cf-input.renamable-page-title--input>input::-webkit-input-placeholder{font-weight:500 !important}.cf-input.renamable-page-title--input>input::-moz-placeholder{font-weight:500 !important}.cf-input.renamable-page-title--input>input:-ms-input-placeholder{font-weight:500 !important}.cf-input.renamable-page-title--input>input:-moz-placeholder{font-weight:500 !important}.clockface--app-wrapper.dashboard-light-mode .renamable-page-title>.cf-heading.cf-page--title,.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input{color:#68687b}.clockface--app-wrapper.dashboard-light-mode .renamable-page-title.untitled>.cf-heading.cf-page--title{color:#d5d5dd}.clockface--app-wrapper.dashboard-light-mode .renamable-page-title:hover>.cf-heading.cf-page--title{color:#828294;border-color:#d5d5dd}.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input{background-color:#fff}.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input::-webkit-input-placeholder{color:#d5d5dd}.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input::-moz-placeholder{color:#d5d5dd}.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input:-ms-input-placeholder{color:#d5d5dd}.clockface--app-wrapper.dashboard-light-mode .cf-input.renamable-page-title--input>input:-moz-placeholder{color:#d5d5dd}.org-switcher--list{display:flex;flex-direction:column;align-items:stretch}.org-switcher--prompt{text-align:center;margin-top:0;margin-bottom:4px;color:#68687b}.org-switcher--item{display:flex;align-items:center;color:#9e9ead;background-color:#07070e;padding:16px;margin-bottom:4px;border-radius:2px;transition:background-color .25s ease,color .25s ease}.org-switcher--item:hover{cursor:pointer;color:#d5d5dd;background-color:#1a1a2a}.org-switcher--item-label{user-select:none;font-size:1.125em;font-weight:600}.org-switcher--item-label em{font-weight:400;font-size:.8em;font-style:normal;opacity:.3;display:inline-block;margin-left:8px}.org-switcher--item-circle{width:32px;height:32px;border-radius:50%;background-color:#07070e;margin-right:16px;display:flex;justify-content:center;align-items:center;align-content:center;transition:background-color .25s ease,color .25s ease,text-shadow .25s ease;color:#07070e}.org-switcher--item:hover .org-switcher--item-circle{text-shadow:0 0 4px #066fc5;background-color:#07070e;color:#00a3ff}.org-switcher--item__selected,.org-switcher--item__selected:hover{cursor:default;background-color:#333346;color:#fff}.org-switcher--item__selected .org-switcher--item-circle,.org-switcher--item__selected:hover .org-switcher--item-circle{text-shadow:0 0 4px #009f5f;color:#67d74e;background-color:#1a1a2a}.tabbed-page--header{width:100%;display:flex;flex-direction:column;align-items:stretch;margin-bottom:32px}.tabbed-page--header-left,.tabbed-page--header-right{display:flex;align-items:center;justify-content:center}.tabbed-page--header-left>*,.tabbed-page--header-right>*{margin-right:8px}.tabbed-page--header-left>*:last-child,.tabbed-page--header-right>*:last-child{margin-right:0}.tabbed-page--header-right{order:1;margin-bottom:8px}.tabbed-page--header-right:only-child{margin-bottom:0}.tabbed-page--header-left{order:2}@media screen and (min-width: 750px){.tabbed-page--header{flex-direction:row;align-items:center;justify-content:space-between}.tabbed-page--header-left{flex:1 0 0;order:1;justify-content:flex-start}.tabbed-page--header-right{flex:1 0 0;order:2;justify-content:flex-end;margin-bottom:0}}.community-templates-template-url{display:inline-block;margin-right:15px}.community-templates-template-url--feedback{margin-top:4px;font-weight:600;padding-left:24px}.community-templates-template-url--feedback__error{color:#ff8564}.community-templates-template-url--feedback__valid{color:#67d74e}.community-templates-installer{margin-top:16px}.community-templates--template-image{width:54px;height:54px}.community-templates--template-name{color:#fff}.community-templates--template-description{user-select:none;color:#bef0ff;margin:0;margin-top:8px}.community-templates--template-description strong{color:#fff;font-weight:700}.community-templates--item-description{color:#b9b9c5;margin:4px 0;line-height:1.125em}.community-templates--item-description:last-child{margin-bottom:0}.community-templates--item-description__blank{color:#68687b;font-style:italic}.community-templates--list-header{display:flex;align-items:center;padding:4px 0;transition:color .25s ease;color:#9e9ead}.community-templates--list-header:hover,.community-templates--list-group__expanded .community-templates--list-header{cursor:pointer;color:#f1f1f3}.community-templates--list-counter{margin-left:8px;opacity:.6}.community-templates--list-group-items{padding-left:32px}.community-templates--list-toggle{width:32px;height:32px;position:relative}.community-templates--list-toggle>.cf-icon{position:absolute;top:50%;left:50%;transition:transform .25s ease;transform:translate(-50%, -50%) rotate(0deg)}.community-templates--list-group__expanded .community-templates--list-toggle>.cf-icon{transform:translate(-50%, -50%) rotate(90deg)}.community-templates--resources-table{margin-left:1.4em}.community-templates--resources-table>tbody>tr>td{padding-right:8px;font-size:13px}.community-templates--resources-table-toggle{display:flex;align-items:center}.community-templates--resources-table-toggle:hover{cursor:pointer}.community-templates--resources-table-caret{margin-right:8px;transition:transform .25s ease}.community-templates--resources-table-caret__expanded{transform:rotate(90deg)}.community-templates--resources-table-toggle h6,.community-templates--resources-table-item{height:40px;line-height:40px}.community-templates--readme{padding-top:32px}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.selector-list--item{font-family:\\\"Roboto Mono\\\",monospace}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.time-machine-queries{width:100%;height:100%;display:inline-flex;flex-direction:column}.time-machine-queries--controls{display:flex;flex-direction:column;align-items:stretch;width:100%;background-color:#07070e;padding:4px;padding-bottom:0;border-radius:3px}.time-machine-queries--tabs{display:inline-flex;margin-right:8px;margin-bottom:4px;position:relative;flex:1 1 auto}.time-machine-queries--tabs::-webkit-scrollbar{height:0;width:0}.time-machine-queries--new{margin-left:2px}.time-machine-queries--buttons{display:inline-flex;flex:0 0 auto;flex-wrap:wrap}.time-machine-queries--buttons>*{margin-bottom:4px}.time-machine-queries--body{flex-grow:1;position:relative;height:100%}.time-machine-influxql-editor{position:absolute;top:0;right:0;bottom:0;left:0}.time-machine--editor-title{user-select:none;font-weight:500;padding-left:6px;color:#b9b9c5}.view-raw-data-toggle{display:flex;align-items:center;justify-content:space-between;margin-right:8px}.view-raw-data-toggle .cf-slide-toggle{margin-left:4px}@media screen and (min-width: 750px){.time-machine-queries--controls{flex-direction:row;align-items:center;justify-content:space-between;padding:4px}.time-machine-queries--tabs{margin-bottom:0}.time-machine-queries--buttons>*{margin-bottom:0}}.editor-shortcuts{width:250px}.editor-shortcuts h5{margin:8px 0 12px}.editor-shortcuts--body{font-size:14px;line-height:16px}.editor-shortcuts--body dt{padding-right:4px;font-weight:700;color:#f1f1f3;margin-top:8px}.editor-shortcuts--body dd{display:block}span[data-testid=switch-query-builder-confirm--confirmation-label]{white-space:normal}.flux-editor{position:absolute;top:8px;right:0;bottom:0;left:0;display:flex;flex-direction:row;align-items:stretch}.flux-editor--left-panel{flex:1 0 0;position:relative;border-radius:2px}.flux-editor--right-panel{margin-left:8px;display:flex}.flux-editor--monaco,.time-machine-editor--embedded{position:absolute;width:100%;height:100%}.flux-editor--monaco.flux-editor--monaco__autogrow,.flux-editor--monaco__autogrow.time-machine-editor--embedded{position:initial;top:initial;left:initial;width:initial;height:initial}.time-machine-editor--embedded{border-radius:2px;border:2px solid #333346;overflow:hidden}.time-machine-editor--loading{width:100%;height:100%;position:relative;background:#292933}.time-machine-editor--loading:after{content:\\\"\\\";position:absolute;background:#202028;top:8px;bottom:8px;left:24px;right:8px}.flux-toolbar{display:flex;flex-direction:row;align-items:stretch;height:100%}.flux-toolbar--tabs{width:100%;display:flex;flex-direction:column;align-items:stretch;width:44px;flex:0 0 44px}.flux-toolbar--path{color:#828294;text-transform:uppercase;letter-spacing:.07em;border-radius:1px;border-bottom:2px solid #1a1a2a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;padding:8px 12px}.flux-toolbar--tab{border-radius:2px;flex:1 0 0;display:flex;justify-content:center;align-items:center;font-size:var(--step-0);line-height:var(--step-0);font-weight:600;background-color:#07070e;color:#68687b;margin-bottom:8px;transition:color .25s ease,background-color .25s ease;overflow:hidden}.flux-toolbar--tab:last-child{margin-bottom:0}.flux-toolbar--tab:hover{cursor:pointer;background-color:#11111c;color:#b9b9c5}.flux-toolbar--tab.flux-toolbar--tab__active{background-color:#1a1a2a;color:#d5d5dd}.flux-toolbar--tab-label{white-space:nowrap;transform:rotate(90deg)}.flux-toolbar--tab-contents{width:300px;background-color:#1a1a2a;flex:1 0 0;position:relative;border-radius:2px;overflow:hidden;margin-right:8px}.flux-toolbar--tab-contents .flux-toolbar{flex-direction:column;padding:8px 0}.flux-toolbar--search{padding:0 8px;display:flex;align-items:center;width:100%;height:56px}.flux-toolbar--scroll-area{height:calc(100% - 56px) !important}.flux-toolbar--list{width:100%;display:flex;flex-direction:column;align-items:stretch;flex-grow:1}.flux-toolbar--list-item,.flux-toolbar--heading{font-size:var(--step-0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.flux-toolbar--list-item{padding:24px 12px;height:33px;line-height:33px;font-family:\\\"Roboto Mono\\\",monospace;font-weight:700;transition:background-color .25s ease,color .25s ease;background-color:#1a1a2a;display:flex;align-items:center;justify-content:space-between}.flux-toolbar--list-item>code{font-size:var(--step-0);background-color:#07070e;border-radius:1px;padding:0 8px;height:33px;line-height:33px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:background-color .25s ease,color .25s ease,text-shadow .25s ease}.flux-toolbar--list-item .flux-toolbar--injector{opacity:0;transition:opacity .25s ease,color .25s ease,box-shadow .25s ease}.flux-toolbar--list-item:hover{background-color:#1a1a2a}.flux-toolbar--list-item:hover>code{background-color:#07070e}.flux-toolbar--list-item:hover .flux-toolbar--injector{opacity:1}.flux-toolbar--list-item.flux-toolbar--new-style{cursor:pointer;background:none;font-weight:400;padding:8px 0}.flux-toolbar--list-item.flux-toolbar--new-style>code{color:#d5d5dd;background-color:none}.flux-toolbar--list-item.flux-toolbar--new-style:hover>code{background-color:#1a1a2a;color:#9394ff}.flux-toolbar--list-item.flux-toolbar--new-style:hover>code:after{content:\\\" +\\\"}.flux-toolbar--heading{padding:8px;padding-bottom:12px;font-weight:600;color:#d5d5dd;border-bottom:2px solid #333346;margin-bottom:4px}.flux-toolbar--variable>code{color:#67d74e}.flux-toolbar--variable:hover>code{color:#9bf445;text-shadow:0 0 4px #2fa74d}.flux-toolbar--function>code{color:#00c9ff}.flux-toolbar--function:hover>code{color:#6bdfff;text-shadow:0 0 4px #066fc5}.flux-toolbar--popover{font-size:13px;padding:20px}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.flux-function-docs{width:420px;height:330px}.flux-function-docs--heading{font-weight:700;margin-top:8px;margin-bottom:8px;display:inline-block;width:100%}article:first-child .flux-function-docs--heading{margin-top:0}.flux-function-docs--snippet{background-color:#07070e;border-radius:2px;margin:4px 0;padding:8px;font-family:\\\"Roboto Mono\\\",monospace}.flux-function-docs--arguments span:first-child{font-weight:700;color:#00a3ff;margin-right:4px}.flux-function-docs--arguments span:nth-child(2){color:#00a3ff;font-style:italic;margin-right:2px}.flux-function-docs--arguments span:nth-child(2).isRequired{color:#dc4e58}.flux-function-docs--arguments div{margin:4px 0 16px 0}.tag-selector--search{margin-top:4px;width:initial !important}.tag-selector--count{flex:0 0 30px;height:30px;background-color:#07070e;border-radius:50%;text-align:center;line-height:30px;font-weight:900;user-select:none;color:#00a3ff;font-size:13px}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.query-tab{background-color:#07070e;color:#828294;margin-right:2px;height:40px;border-radius:2px;display:inline-flex;flex:0 1 auto;justify-content:space-between;align-items:center;font-weight:600;padding:0 12px;font-size:var(--step-0);user-select:none;transition:background-color .25s ease,color .25s ease,opacity .25s ease}.query-tab .query-tab--hide{display:none;font-size:1.125em;margin-right:4px}.query-tab .query-tab--name{width:40px;margin-right:4px}.query-tab:hover{cursor:pointer;background-color:#1a1a2a;color:#d5d5dd}.query-tab__active{flex:0 0 auto;background:#1a1a2a;color:#d5d5dd}.query-tab__active .query-tab--hide{display:inline-flex}.query-tab__active .query-tab--name{width:auto}.query-tab--name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.query-tab--close,.query-tab--hide{color:rgba(213,213,221,.5);transition:color .25s ease}.query-tab--close:hover,.query-tab--hide:hover{color:#d5d5dd}.query-tab__hidden{font-style:italic;opacity:.5}.query-tab--timer{white-space:nowrap;flex:1 1 auto;font-weight:600;margin-right:8px;transition:opacity .25s;opacity:0}.query-tab--timer.query-tab--timer__visible{opacity:.5}.time-machine{height:100%;flex:0 0 100%;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.time-machine,.time-machine:hover{cursor:default}.time-machine--split{flex:0 0 calc(100% - 420px)}.time-machine--top,.time-machine--bottom{border-radius:4px;width:100%;height:100%;position:absolute}.time-machine--top{position:relative;background-color:rgba(26,26,42,.5)}.time-machine--bottom{display:flex;flex-direction:column;align-items:center}.time-machine--bottom-contents{width:100%;flex:0 0 100%}.time-machine--view{width:100%;height:100%;position:absolute;padding:16px}.time-machine--view>.single-stat{border-radius:4px;top:0;right:0;bottom:0;left:0}.time-machine--view__empty{background-position:center center;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_7___ + \")}.time-machine--view__empty>.cell--view-empty{justify-content:flex-end}.query-builder{position:absolute;top:0;right:0;left:0;bottom:0;padding-top:8px;display:flex;flex-direction:column;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.query-builder,.query-builder:hover{cursor:default}.query-builder--cards{flex:1 1 0;display:flex;justify-content:space-between}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.view-options--wrap{flex:0 0 412px;height:100%;background-color:#1a1a2a;margin-right:8px;border-radius:4px}.view-options{padding:32px}.view-options>.cf-grid--container>.cf-grid--row>.cf-grid--column{width:100% !important}.view-options--header{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;font-weight:500;color:#9e9ead}.view-options--header,.view-options--header:hover{cursor:default}h4.view-options--header{font-size:16px;padding-top:16px;border-top:2px solid #333346;margin-top:8px;margin-bottom:16px}*:first-child>h4.view-options--header{margin-top:0;padding-top:0;border-top:0}h5.view-options--header{font-size:14px;border-bottom:2px solid #333346;margin-top:32px;margin-bottom:16px;padding-bottom:4px}.view-options--checkbox{margin-bottom:16px}.column-option{font-family:\\\"Roboto Mono\\\",monospace;font-size:11px}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}.view-type-dropdown .cf-dropdown-item--children,.view-type-dropdown .cf-dropdown--selected{display:flex;align-items:center}.view-type-dropdown .cf-dropdown--selected .view-type-dropdown--name{margin-left:8px}.view-type-dropdown .cf-dropdown--selected .view-type-dropdown--graphic{width:20px;height:20px}.view-type-dropdown--name{margin-left:10px}.view-type-dropdown--graphic{width:40px;height:40px}.vis-graphic--line{stroke-width:1px;fill:none;stroke-linecap:round;stroke-miterlimit:10}.vis-graphic--line-a{stroke:#9e9ead}.vis-graphic--line-b{stroke:#68687b}.vis-graphic--line-c{stroke:#4d4d60}.vis-graphic--line-d{stroke:#b9b9c5}.vis-graphic--line-e{stroke:#67d74e;stroke-width:4px}.vis-graphic--fill-a{fill:#9e9ead}.vis-graphic--fill-b{fill:#68687b}.vis-graphic--fill-c{fill:#4d4d60}.vis-graphic--fill-d{fill:#b9b9c5;opacity:1}.vis-graphic--line-a{stroke:#00c9ff}.vis-graphic--line-b{stroke:#ce58eb}.vis-graphic--line-c{stroke:#67d74e}.vis-graphic--line-d{stroke:#f1f1f3}.vis-graphic--fill-a{fill:#00c9ff}.vis-graphic--fill-b{fill:#ce58eb}.vis-graphic--fill-c{fill:#67d74e}.vis-graphic--fill-e{fill:#67d74e;opacity:.3}.vis-graphic--fill-a,.vis-graphic--fill-b,.vis-graphic--fill-c{opacity:.8}.vis-graphic--fill-d{fill:#f1f1f3;opacity:1}.builder-card--list{display:flex;flex:1 1 0;flex-wrap:nowrap;position:absolute;height:100%}.builder-card--list>*{margin-left:4px;margin-right:4px}.builder-card--list>*:first-child{margin-left:0}.builder-card--list>*:last-child{margin-right:0}.builder-card{border-radius:4px;background-color:#1a1a2a;overflow:hidden;display:flex;flex-direction:column;align-items:stretch;position:relative}.builder-card--header{flex:0 0 32px;background-color:#1a1a2a;display:flex;align-items:center;justify-content:space-between}.builder-card--title{display:inline-block;margin:0 10px;font-weight:700;font-size:13px;text-transform:uppercase;letter-spacing:0;color:#9e9ead}.builder-card--delete{flex:0 0 32px;height:32px;position:relative}.builder-card--delete:before,.builder-card--delete:after{content:\\\"\\\";position:absolute;top:50%;left:50%;width:14px;height:2px;border-radius:1px;background-color:#68687b;transition:background-color .25s ease}.builder-card--delete:before{transform:translate(-50%, -50%) rotate(45deg)}.builder-card--delete:after{transform:translate(-50%, -50%) rotate(-45deg)}.builder-card--delete:hover{cursor:pointer}.builder-card--delete:hover:before,.builder-card--delete:hover:after{background-color:#ff8564}.builder-card--hamburger{flex:0 0 16px;height:2px;border-radius:1px;background-color:#4d4d60;margin-left:10px;position:relative;transition:background-color .25s ease}.builder-card--hamburger:before,.builder-card--hamburger:after{content:\\\"\\\";position:absolute;top:0;width:100%;height:100%;background-color:#4d4d60;border-radius:1px;transition:background-color .25s ease}.builder-card--hamburger:before{transform:translateY(-200%)}.builder-card--hamburger:after{transform:translateY(200%)}.builder-card--draggable{display:flex;align-items:center;height:32px;flex:1 0 0}.builder-card--draggable .builder-card--title{margin-left:8px;transition:color .25s ease}.builder-card--draggable:hover{cursor:grab}.builder-card--draggable:hover .builder-card--title{color:#d5d5dd}.builder-card--draggable:hover .builder-card--hamburger,.builder-card--draggable:hover .builder-card--hamburger:before,.builder-card--draggable:hover .builder-card--hamburger:after{background-color:#d5d5dd}.aggregation-selector{border-left:2px solid #07070e}.builder-card--menu{border-bottom:2px solid #333346;padding:8px}.builder-card--menu.aggregation-selector-menu{padding:12px 8px}.builder-card--body{flex:1 1 0;overflow:hidden}.builder-card--body.aggregation-selector-body{flex:unset;padding:12px 8px 24px 8px;overflow:visible}.builder-card--empty{display:flex;flex-direction:column;text-align:center;align-items:center;justify-content:center;align-content:center;color:#68687b}.builder-card--empty>*{margin:4px 0}.builder-card--contents{padding:8px}.builder-card--list>.query-builder--add-card-button{height:100%;background-color:#1a1a2a;border-color:#1a1a2a;flex-grow:0;flex-shrink:0}.cf-input-label.fill-values-checkbox--label{color:#9e9ead}.duration-input{position:relative;width:100%}.duration-input--menu{position:absolute;top:100%;left:0;right:0;background:#1a1a2a;z-index:100}.side-bar{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important;overflow:hidden;transform:translate3d(0, 0, 0);flex:0 1 auto;border-radius:4px 0 0 4px;background-color:#07070e;border:2px solid #1a1a2a;max-width:250px}.side-bar,.side-bar:hover{cursor:default}.side-bar.show{flex:1 0 140px}.side-bar--container{box-sizing:border-box;opacity:0;height:100%;width:100%;display:inline-flex;flex-direction:column;padding:32px 0}.side-bar.show .side-bar--container{opacity:1}.side-bar--title{text-align:left;margin:0 16px 16px 16px;color:#b9b9c5;font-size:15px}.side-bar--tabs{display:inline-flex;flex-direction:column;justify-content:flex-start;width:100%;flex:1 1 0;padding-bottom:16px}.side-bar--tab{flex-shrink:0;height:30px;display:inline-flex;align-items:center;border-radius:4px 0 0 4px;font-size:15px;font-weight:600;margin-left:16px;color:#828294;background-color:rgba(0,0,0,0);white-space:nowrap}.side-bar--tab:hover{color:#d5d5dd;cursor:pointer;background-color:rgba(51,51,70,.6)}.side-bar--tab.active{color:#d5d5dd;background-color:#333346}.side-bar--icon{width:16px;color:#4d4d60;display:inline-block;font-size:16px;margin:0 13px}.side-bar--tab:hover .side-bar--icon{color:#9e9ead}.side-bar--tab.active .side-bar--icon{color:#00a3ff}.side-bar--tab__success,.side-bar--tab__success .side-bar--icon,.side-bar--tab__success:hover,.side-bar--tab__success:hover .side-bar--icon{color:#2fa74d}.side-bar--tab__pending,.side-bar--tab__pending .side-bar--icon,.side-bar--tab__pending:hover,.side-bar--tab__pending:hover .side-bar--icon{color:#ffb94a}.side-bar--tab__error,.side-bar--tab__error .side-bar--icon,.side-bar--tab__error:hover,.side-bar--tab__error:hover .side-bar--icon{color:#ff8564}.side-bar--buttons{margin:0 16px}.side-bar--button{width:100%}@media screen and (min-width: 1080px){.side-bar--tab{margin-left:32px}.side-bar--title{margin:0 32px 16px 32px;font-size:17px}.side-bar--buttons{margin:0 32px}.side-bar.show{flex:1 0 240px}}.data-loading--overlay{height:calc(90vh - 140px);display:flex;flex-direction:column}.data-loading--overlay .data-loading--form{flex-grow:1;display:inline-flex;flex-direction:column}.data-loading--overlay .data-loading--form .data-loading--scroll-content{flex-grow:1;text-align:center;display:inline-flex;flex-direction:column}.data-loading--overlay .data-loading--form .data-loading--scroll-content .data-loading--columns{display:flex;flex-direction:row;flex-grow:1}.data-loading--overlay .data-loading--form .data-loading--button-container{position:relative;display:inline-flex;align-content:center;justify-content:center;padding:15px}.data-loading--column-panel{background-color:#1a1a2a;border-radius:0 4px 4px 0;flex:1 0 auto;padding:32px}.configuration-overlay--body{padding:45px !important;padding-top:0 !important;padding-bottom:0 !important}.telegraf-instructions p,.telegraf-instructions h6{font-size:14px}.telegraf-instructions p{margin-bottom:2em}.line-protocol--header{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;z-index:5050;position:relative}.line-protocol--content{height:206px}.line-protocol--status{font-size:13px;font-weight:600;user-select:none}.line-protocol--status.done{color:#2fa74d}.line-protocol--status.error{color:#ff8564}.line-protocol--spinner{height:364px;border:2px solid #1a1a2a;border-radius:4px;display:flex;align-items:center;justify-content:center;flex-direction:column}.cf-panel .csv-body--padding{padding:32px 16px}.empty-graph-error{width:100%;height:100%;display:flex;justify-content:space-between;border-radius:2px;background-color:#07070e;color:#ff8564;border:2px solid #07070e}.empty-graph-error pre{font-size:14px;padding:8px;user-select:text !important;cursor:text}.empty-graph-error--icon{display:inline-block;margin-right:8px}.empty-graph-error--copy{margin-top:4px;margin-right:4px}.empty-graph-error--scroll{width:90% !important;margin-top:16px}.auto-domain-input--custom{padding-top:4px}.fancy-checkbox{color:#9e9ead;font-size:12px;font-weight:600;position:relative;padding-left:22px;position:relative;cursor:pointer}.fancy-checkbox input{position:absolute;left:-9999px}.fancy-checkbox:before,.fancy-checkbox:after{content:\\\"\\\";position:absolute;top:50%;transform:translate(-50%, -50%);transition:background-color .25s ease}.fancy-checkbox:before{left:7px;z-index:2;width:14px;height:14px;background-color:#07070e;border-radius:3px}.fancy-checkbox:after{left:7px;z-index:3;width:6px;height:6px;background-color:#6bdfff;transition:opacity .25s ease,transform .25s ease;border-radius:50%;opacity:0;transform:translate(-50%, -50%) scale(1.8, 1.8)}.fancy-checkbox.checked:before{background-color:#0b3a8d}.fancy-checkbox.checked:after{opacity:1;transform:translate(-50%, -50%) scale(1, 1)}.dapper-scrollbars--wrapper{margin-right:0 !important;margin-bottom:10px !important;right:0 !important;bottom:0 !important}.dapper-scrollbars--track-x,.dapper-scrollbars--track-y{border-radius:6px !important;position:absolute !important;background-color:rgba(7,7,14,.4) !important;user-select:none !important;overflow:hidden !important;transition:opacity .25s ease !important}.dapper-scrollbars--track-x{height:6px !important;width:calc(100% - 6px) !important;bottom:3px !important;left:3px !important}.dapper-scrollbars--track-y{width:6px !important;height:calc(100% - 6px) !important;right:3px !important;top:3px !important}.dapper-scrollbars--thumb-x,.dapper-scrollbars--thumb-y{border-radius:3px !important}.dapper-scrollbars--thumb-x{height:6px !important}.dapper-scrollbars--thumb-y{width:6px !important}.dapper-scrollbars--autohide .dapper-scrollbars--track-x,.dapper-scrollbars--autohide .dapper-scrollbars--track-y{opacity:0}.dapper-scrollbars--autohide:hover .dapper-scrollbars--track-x,.dapper-scrollbars--autohide:hover .dapper-scrollbars--track-y{opacity:1}.search-widget-input{flex:1 0 80px}.import-template-overlay,.import-template-overlay--empty{height:500px;display:flex}.import-template-overlay{align-items:stretch}.import-template-overlay--empty{background-color:#1a1a2a;border-radius:4px;align-content:center;align-items:center;justify-content:center}.signin-page .cf-funnel-page--content{display:flex;height:100%;justify-content:center}.signin-page .cf-dapper-scrollbars--content{align-items:center;display:flex !important}.cf-panel.signin-page--panel{width:300px}.cf-panel.signin-page--panel .cf-panel--body{padding:32px;text-align:center}.signin-page--logo{height:auto;margin-bottom:3em;margin-top:1em;width:70%}.login-page--logo{height:auto;width:20%}.signin-page--cubo{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_8___ + \");background-position:center center;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:100px;width:100px}.create-account--button{margin:15px 0}.github-logo{width:70px;height:70px;fill:#fff}.google-logo{height:70px;width:70px}.google-logo .google-logo--blue{fill:#3e82f1}.google-logo .google-logo--green{fill:#32a753}.google-logo .google-logo--red{fill:#e74133}.google-logo .google-logo--yellow{fill:#f9bb00}.heading--margins{margin:16px 0}.helper-link-text a:link{font-size:.85em;font-weight:400}.sign-up--form{min-width:330px;width:100%;height:100%;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;margin-top:32px}.sign-up--form-panel{max-width:500px;width:400px;height:100%}.cf-heading.sign-up--form-separator{color:#68687b;margin:16px 0}@media screen and (min-width: 1080px){.sign-up--form-panel{max-width:100%}.cf-heading.sign-up--form-separator{margin:32px 0 16px 0}}.sign-up--social-button-group{position:relative}.sign-up--social-button-group .signup-text{position:relative}.sign-up--social-button-group .signup-icon{width:33px;height:auto;background:rgba(0,0,0,0);position:absolute;top:50%;transform:translate(-50%, -50%);left:30px}.sign-up--social-button-group .sign-up--google{background:#fff;color:#444}.sign-up--social-button-group .sign-up--google:active,.sign-up--social-button-group .sign-up--google:focus,.sign-up--social-button-group .sign-up--google:active:hover,.sign-up--social-button-group .sign-up--google.active,.sign-up--social-button-group .sign-up--google.active:hover,.sign-up--social-button-group .sign-up--google:hover,.sign-up--social-button-group .sign-up--google.cf-button-default:hover{color:#444}.sign-up--social-button-group .sign-up--google:after{background:#fff}.sign-up--social-button-group .sign-up--microsoft{background:#fff;color:#5e5e5e}.sign-up--social-button-group .sign-up--microsoft:active,.sign-up--social-button-group .sign-up--microsoft:focus,.sign-up--social-button-group .sign-up--microsoft:active:hover,.sign-up--social-button-group .sign-up--microsoft.active,.sign-up--social-button-group .sign-up--microsoft.active:hover,.sign-up--social-button-group .sign-up--microsoft:hover,.sign-up--social-button-group .sign-up--microsoft.cf-button-default:hover{color:#5e5e5e}.sign-up--social-button-group .sign-up--microsoft:after{background:#fff}.threshold-setting--error{width:100%;font-weight:600;font-size:11px;color:#f95f53}.threshold-setting--value{flex:1 0 110px}.threshold-markers{width:100%;height:100%}.threshold-marker--crit{background-color:#dc4e58}.threshold-marker--crit.threshold-marker--handle{background:linear-gradient(115deg, #dc4e58 0%, #dc4e58 35%, #f95f53 100%)}.threshold-marker--crit.threshold-marker--handle:before{border-right:12px solid #dc4e58}.threshold-marker--warn{background-color:#ffd255}.threshold-marker--warn.threshold-marker--handle{background:linear-gradient(115deg, #ffd255 0%, #ffd255 35%, #ffb94a 100%)}.threshold-marker--warn.threshold-marker--handle:before{border-right:12px solid #ffd255}.threshold-marker--ok{background-color:#009f5f}.threshold-marker--ok.threshold-marker--handle{background:linear-gradient(115deg, #009f5f 0%, #009f5f 35%, #67d74e 100%)}.threshold-marker--ok.threshold-marker--handle:before{border-right:12px solid #009f5f}.threshold-marker--info{background-color:#066fc5}.threshold-marker--info.threshold-marker--handle{background:linear-gradient(115deg, #066fc5 0%, #066fc5 35%, #00c9ff 100%)}.threshold-marker--info.threshold-marker--handle:before{border-right:12px solid #066fc5}.threshold-marker--unknown{background-color:#8e1fc3}.threshold-marker--unknown.threshold-marker--handle{background:linear-gradient(115deg, #8e1fc3 0%, #8e1fc3 35%, #8e1fc3 100%)}.threshold-marker--unknown.threshold-marker--handle:before{border-right:12px solid #8e1fc3}.threshold-marker--area{position:absolute;width:100%;opacity:.07}.threshold-marker--line{position:absolute;width:100%;height:1px}.threshold-marker--handle{position:absolute;right:-29px;width:18px;height:18px;border-radius:0 3px 3px 0;transform:translateY(-50%);cursor:grab}.threshold-marker--handle:active{cursor:grabbing}.threshold-marker--handle:before{content:\\\"\\\";border-top:9px solid rgba(0,0,0,0);border-bottom:9px solid rgba(0,0,0,0);display:block;left:-12px;position:absolute}.event-marker--line,.event-marker--line__unknown,.event-marker--line__info,.event-marker--line__ok,.event-marker--line__warn,.event-marker--line__crit{position:absolute;height:100%;width:1px;top:0px;opacity:.5;z-index:2}.event-marker--line:after,.event-marker--line__unknown:after,.event-marker--line__info:after,.event-marker--line__ok:after,.event-marker--line__warn:after,.event-marker--line__crit:after,.event-marker--line:before,.event-marker--line__unknown:before,.event-marker--line__info:before,.event-marker--line__ok:before,.event-marker--line__warn:before,.event-marker--line__crit:before{content:\\\"\\\";position:absolute;left:0;height:calc(100% + 6px);bottom:0}.event-marker--line:after,.event-marker--line__unknown:after,.event-marker--line__info:after,.event-marker--line__ok:after,.event-marker--line__warn:after,.event-marker--line__crit:after{left:0;z-index:3;width:1px}.event-marker--line:before,.event-marker--line__unknown:before,.event-marker--line__info:before,.event-marker--line__ok:before,.event-marker--line__warn:before,.event-marker--line__crit:before{width:3px;background-color:rgba(7,7,14,.8);opacity:0;z-index:2;left:-1px}.event-marker--line:hover,.event-marker--line__unknown:hover,.event-marker--line__info:hover,.event-marker--line__ok:hover,.event-marker--line__warn:hover,.event-marker--line__crit:hover,.event-marker--line:hover:before,.event-marker--line__unknown:hover:before,.event-marker--line__info:hover:before,.event-marker--line__ok:hover:before,.event-marker--line__warn:hover:before,.event-marker--line__crit:hover:before{opacity:1}.event-marker--line-rect{width:4px;border-radius:2px 2px 0 0;height:20px;color:#fff;position:absolute;left:50%;top:0;transform:translate(-50%, -100%) rotate(360deg);z-index:3}.event-marker--line__crit:after,.event-marker--line__crit .event-marker--line-rect{background-color:#dc4e58}.event-marker--line__warn:after,.event-marker--line__warn .event-marker--line-rect{background-color:#ffd255}.event-marker--line__ok:after,.event-marker--line__ok .event-marker--line-rect{background-color:#009f5f}.event-marker--line__info:after,.event-marker--line__info .event-marker--line-rect{background-color:#066fc5}.event-marker--line__unknown:after,.event-marker--line__unknown .event-marker--line-rect{background-color:#8e1fc3}.event-marker--vis-selector{position:absolute;cursor:default;right:-30px;bottom:-42px;font-size:12px}.event-marker--vis-icon{margin:4px;font-weight:bold;font-size:20px}.event-marker-tooltip{background-color:#07070e;padding:10px;border:0}.right .event-marker-tooltip+.box-tooltip--caret-container .box-tooltip--caret{border-right-color:#07070e}.left .event-marker-tooltip+.box-tooltip--caret-container .box-tooltip--caret{border-left-color:#07070e}.event-marker-tooltip--table{display:flex}.event-marker-tooltip--column{display:flex;align-items:stretch;flex-direction:column;margin-right:10px}.event-marker-tooltip--column:last-child{margin-right:0}.event-marker-tooltip--header,.event-marker-tooltip--cell{display:flex;align-items:center;justify-content:flex-start;white-space:nowrap;text-align:left;margin-bottom:4px}.event-marker-tooltip--header *:last-child,.event-marker-tooltip--cell *:last-child{margin-bottom:0}.event-marker-tooltip--cell{color:#d5d5dd;line-height:10px;font-size:10px;font-family:\\\"Roboto Mono\\\",monospace}.event-marker-tooltip--header{color:#9e9ead;font-size:11px;line-height:11px;font-weight:500}.load-data--asset-alert{margin-bottom:32px}.cf-page-control-bar+.rate-alert{margin:0 16px 16px}.rate-alert--content{display:inline-flex;flex-direction:column;font-weight:500}.flex-upgrade-content.rate-alert--content__free{margin:4px}.upgrade-message{padding-right:16px}.cf-page--title{flex-shrink:0}.asset-alert{height:100%;background-position:bottom -20px left -20px;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \")}.dashboards--asset-alert .asset-alert--contents{position:absolute;bottom:0}a.upgrade-payg--button{background:#00a3ff;background:-moz-linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);background:-webkit-linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);background:linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 )}.asset-limit-overlay--contents{background-color:#07070e;border-radius:2px}.asset-limit-overlay--contents p{text-align:center}.asset-limit-overlay--contents .cf-overlay--title{word-break:break-word}.asset-limit-overlay--graphic-container{width:100%;display:inline-flex;justify-content:center}.asset-limit-overlay--graphic{display:inline-flex;position:relative;width:100%;max-width:720px}.asset-limit-overlay--graphic:after{content:\\\"\\\";display:inline-block;padding-bottom:57.3170731707%}.asset-limit-overlay--graphic-element{position:absolute;top:0;left:0;width:100%;height:100%;background-position:center center;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_9___ + \")}button.upgrade-payg--button{background:linear-gradient(45deg, rgb(52, 187, 85) 0%, rgb(0, 163, 255) 100%)}.credit-250-experiment-upgrade-button--text{margin:16px}@media screen and (min-width: 800px){.rate-alert{margin-left:32px}.rate-alert--content{flex-direction:row;width:100%;height:100%;align-items:center;justify-content:space-between}.rate-alert--content .rate-alert--button{margin-top:0;margin-left:16px}.cf-page-control-bar+.rate-alert{margin:0 32px 16px}.asset-limit-overlay--graphic{width:60%}.asset-limit-overlay--contents .cf-overlay--header__wrap{align-items:center}}.cloud-upgrade-banner{display:block}.cloud-upgrade-banner--button{text-align:center}a.cloud-upgrade-banner__collapsed{text-align:center;border-radius:2px;margin:8px 0;display:none;width:100%}a.cloud-upgrade-banner__collapsed h5{font-size:var(--step--1);font-size:.9em;margin-bottom:4px}a.cloud-upgrade-banner__collapsed .cf-icon{font-size:2.75em;margin-bottom:4px}@media screen and (min-width: 800px){.cf-tree-nav__collapsed a.cloud-upgrade-banner__collapsed{display:inline-block}.cf-tree-nav__collapsed .cloud-upgrade-banner{display:none}}.copy-resource-id{transition:color .25s ease}.copy-resource-id:hover{cursor:pointer;color:#00a3ff}.copy-resource-id--click-target{color:#b9b9c5;transition:opacity .25s ease;opacity:0;display:inline-block;margin-left:8px}.copy-resource-id:hover .copy-resource-id--click-target{opacity:1}.rule-eo{width:calc(100vw - 64px);height:calc(100vh - 32px);margin:0 auto;display:flex;flex-direction:column;background:#07070e;background:-moz-linear-gradient(top, #07070e 0%, #07070e 100%);background:-webkit-linear-gradient(top, #07070e 0%, #07070e 100%);background:linear-gradient(to bottom, #07070e 0%, #07070e 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=0 );border-radius:0 0 4px 4px}.rule-eo .rule-eo-contents{padding-left:32px;padding-right:32px}.rule-eo .condition-row{display:flex;flex-direction:column;background-color:#333346;border-radius:4px;margin-bottom:4px;padding:10px}.rule-eo .condition-row .period-count--container{display:flex;flex-direction:row;margin-bottom:4px;align-items:center}.rule-eo .condition-row .period-count--container .count-input,.rule-eo .condition-row .period-count--container .period-input{flex:100px}.rule-eo .condition-row .status-levels--container{display:flex;flex-direction:row;align-items:center}.rule-eo .condition-row .tag-rule{display:flex;flex-direction:row}.rule-eo .sentence-frag{background-color:#4d4d60;border-radius:4px;font-size:12px;padding:0 9px;height:30px;line-height:26px;text-align:center;font-weight:bold}.rule-eo .color-dropdown--item{display:flex;align-items:center;justify-content:flex-start}.rule-eo .color-dropdown--swatch{width:12px;height:12px;border-radius:50%;margin-right:5px}.dashed-button{width:100%;border:2px dashed #333346;background-color:rgba(51,51,70,0);color:#68687b;transition:background-color .25s ease,color .25s ease,border-color .25s ease;font-weight:700;outline:none;border-radius:4px;text-align:center}.dashed-button:hover{cursor:pointer;background-color:rgba(51,51,70,.25);border-color:#333346;color:#b9b9c5}.dashed-button__default:active{border-color:#68687b;color:#d5d5dd}.dashed-button__primary:active{border-color:#00a3ff;color:#00a3ff}.dashed-button__secondary:active{border-color:#be2ee4;color:#be2ee4}.dashed-button__success:active{border-color:#2fa74d;color:#2fa74d}.dashed-button__warning:active{border-color:#ffd255;color:#ffd255}.dashed-button__danger:active{border-color:#ff8564;color:#ff8564}.dashed-button__xs{height:32px;font-size:11px}.dashed-button__sm{height:48px;font-size:12px}.dashed-button__md{height:60px;font-size:13px}.dashed-button__lg{height:72px;font-size:14px}.alerting-index .cf-page-contents__fluid{display:flex;flex-direction:column;align-items:stretch}.alerting-index--selector{width:100%;margin-bottom:8px}.alerting-index--columns{display:flex;align-items:stretch;flex:1 0 0}.alerting-index--column{display:none;flex-direction:column;flex:1 0 0;overflow:hidden;margin-bottom:16px}.alerting-index__checks .alerting-index--checks,.alerting-index__endpoints .alerting-index--notification-endpoints,.alerting-index__rules .alerting-index--notification-rules{display:flex}.alerting-index--column-body{flex:1 0 0}.alerting-index--list,.alerting-index--search{padding:24px 0;padding-top:0}.alert-header--cta{font-size:16px}.alert-header--cta span{margin-right:4px}.alerting-first-time{border:2px solid #0b3a8d}.alerting-first-time h1,.alerting-first-time h5{user-select:none;color:#bef0ff}.alerting-first-time h1{letter-spacing:0;margin-top:0}.alerting-first-time h5{line-height:1.5em;font-weight:500;margin-bottom:.25em}.alerting-first-time h5 strong{font-weight:900;color:#fff}.alerting-first-time .cf-button{margin-bottom:16px;margin-right:8px}.query-checklist--popover{width:300px;padding:16px;user-select:none}.query-checklist--popover p,.query-checklist--popover li{font-size:14px;line-height:1.5em;font-weight:500;color:#d5d5dd}.query-checklist--popover p{margin-top:0}.query-checklist--list{margin-bottom:0;padding:0}.query-checklist--item{margin:0;padding-left:0;list-style:none}.query-checklist--item .cf-icon{display:inline-block;margin-right:5px;width:16px}.query-checklist--item.error{color:#ff8564}.query-checklist--item.valid{color:#2fa74d}.alert-history-contents{display:flex;flex-direction:column;height:100%;width:100%}.alert-history-contents .time-series-container{background-color:#07070e;border-radius:2px}.alert-builder{height:100%;padding-top:8px;display:flex}.alert-builder--card{margin-right:8px}.alert-builder--card:last-child{margin-right:0}.alert-builder--card .builder-card--contents{min-height:100%;padding:16px}.alert-builder--card .builder-card--header{justify-content:center}.alert-builder--card.alert-builder--meta-card{flex:1 0 140px !important}.alert-builder--card.alert-builder--message-card{flex:3 0 140px !important}.alert-builder--card.alert-builder--conditions-card{flex:2 0 200px !important}@media screen and (min-width: 1080px){.alert-builder--card.alert-builder--meta-card{flex:1 0 280px !important}.alert-builder--card.alert-builder--message-card{flex:3 0 320px !important}.alert-builder--card.alert-builder--conditions-card{flex:2 0 320px !important}}.cf-empty-state.alert-builder--card__empty{padding:32px;height:100%;justify-content:center}.alert-builder--message-template textarea{height:120px}.alert-builder--message-template.cf-text-area--container.cf-input-md{height:auto}.alert-builder--message-template.cf-text-area--container.cf-input-md textarea{height:120px;font-family:\\\"Roboto Mono\\\",monospace}.alert-builder--message-help{padding:0 16px}.alert-builder--message-help p{font-size:13px;font-weight:500}.alert-builder--message-help code{background-color:#07070e;color:#dd84f1;padding:2px 4px;border-radius:3px;user-select:text}.alert-builder--check-type-selector{margin-bottom:16px}.alert-builder--tag-row{margin-bottom:8px}.event-table{height:100%;display:flex;flex-direction:column;justify-content:stretch}.event-table .event-table--table{flex:1 1 100%}.event-table .event-table-header{flex:0 0 auto}.event-table-header,.event-row{display:flex;align-items:center;justify-content:space-between}.event-table-header>*,.event-row>*{flex-grow:1;flex-shrink:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.event-table-header{padding:0 8px;margin-bottom:16px}.event-table-header--field{user-select:none;font-size:13px;font-weight:600;text-transform:uppercase;color:#9e9ead;margin:0 8px}.event-row,.event-loading-row,.event-footer-row,.event-error-row{height:calc(100% - 4px);width:100%;border-radius:4px;display:flex;align-items:center;font-size:12px;padding:0 8px}.event-row,.event-loading-row{background:#1a1a2a}.event-footer-row,.event-error-row{justify-content:center;font-weight:600;user-select:none}.event-footer-row{color:#9e9ead}.event-error-row{color:#f95f53}.event-row--field,.event-loading-row--placeholder{margin:0 8px}.event-row--field{overflow:hidden}@keyframes glow{from{opacity:1}to{opacity:.5}}.event-loading-row--placeholder{background-color:#333346;border-radius:3px;animation-name:glow;animation-duration:1s;animation-iteration-count:infinite;animation-direction:alternate}.alert-history-page .cf-page-contents.full-height .cf-page-contents--padding{width:100%;height:100%;padding:0 54px 54px 54px}.alert-history{width:100%;height:100%;padding-top:16px;overflow:hidden}.level-table-field{font-weight:600}.level-table-field--crit{color:#dc4e58}.level-table-field--warn{color:#f48d38}.level-table-field--ok{color:#2fa74d}.level-table-field--info{color:#00a3ff}.level-table-field--unknown{color:#8e1fc3}.sent-table-field--sent{color:#009f5f}.sent-table-field--not-sent{color:#f48d38}.zuora-outage-funnel-page .cf-funnel-page--content{display:flex;align-items:center;justify-content:center;flex-direction:column}.zuora-outage-funnel-page .cf-funnel-page--content>.zuora-outage-panel{margin:50px;font-size:large}.zuora-outage-panel{font-size:larger}.zuora-outage-panel>.zuora-outage-panel-body{text-align:left}.rule-overlay-footer--error{display:flex;align-items:center;justify-content:center;color:#dc4e58;font-size:12px;font-weight:600;margin:16px 0}.label-card--description{font-weight:600;margin:0;margin-left:16px}.label-card--description__untitled{color:#68687b;font-style:italic}.status-search-bar{position:relative;width:100%}.status-search-bar--suggestions{position:absolute;top:100%;left:0;right:0;background:#1a1a2a;z-index:100}.status-search-bar--clear{position:absolute;right:8px;top:50%;transform:translateY(-50%);z-index:100;display:flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;color:#9e9ead;border-radius:2px;background:#1a1a2a;cursor:pointer}.status-search-bar--clear:hover{background:#333346}.dashboards-index__page-contents .cf-dapper-scrollbars--content{height:100% !important}.dashboards-index__page-contents .cf-page-contents__fixed{height:100%}.dashboards-index__page-contents .cf-resource-list{height:100%}.dashboards-card-grid{padding-bottom:32px;display:grid;grid-template-columns:minmax(100%, 1fr);grid-auto-rows:min-content;grid-column-gap:4px;grid-row-gap:4px;height:100%;width:100%}.dashboards-card-grid .cf-resource-card{display:flex;margin-bottom:0}.dashboards-card-grid .cf-resource-card--contents{position:relative}.dashboards-card-grid .cf-resource-editable-name{max-width:80%}.dashboards-card-grid .cf-resource-editable-name .cf-resource-name--text{text-overflow:ellipsis;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.dashboards-card-grid .cf-resource-editable-name__editing .cf-resource-name--text{display:none !important}.dashboards-card-grid .cf-resource-description,.dashboards-card-grid .cf-resource-description--preview,.dashboards-card-grid #text{max-width:496px;overflow:hidden}@media screen and (min-width: 750px){.dashboards-card-grid{grid-template-columns:minmax(calc(50% - 4px), 1fr) minmax(calc(50% - 4px), 1fr)}}@media screen and (min-width: 1080px){.dashboards-card-grid{grid-template-columns:minmax(calc(33.3333% - 4px), 1fr) minmax(calc(33.3333% - 4px), 1fr) minmax(calc(33.3333% - 4px), 1fr)}}@media screen and (min-width: 1500px){.dashboards-card-grid{grid-template-columns:minmax(calc(25% - 4px), 1fr) minmax(calc(25% - 4px), 1fr) minmax(calc(25% - 4px), 1fr) minmax(calc(25% - 4px), 1fr)}}.clockface--app-wrapper.dashboard-light-mode{background-color:#f1f1f3;color:#68687b}.clockface--app-wrapper.dashboard-light-mode .cf-page-contents>.cf-dapper-scrollbars--track-y{background-color:#d5d5dd !important}.clockface--app-wrapper.dashboard-light-mode .cf-page--sub-title{color:#b9b9c5}.clockface--app-wrapper.dashboard-light-mode .cell{background-color:#fff}.clockface--app-wrapper.dashboard-light-mode .cell--dot-grid,.clockface--app-wrapper.dashboard-light-mode .cell--dot-grid:before,.clockface--app-wrapper.dashboard-light-mode .cell--dot-grid:after{background-color:#b9b9c5}.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--dot-grid,.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--dot-grid:before,.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--dot-grid:after{background-color:#68687b}.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--draggable:hover .cell--dot-grid,.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--draggable:hover .cell--dot-grid:before,.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--draggable:hover .cell--dot-grid:after{background-color:#00a3ff}.clockface--app-wrapper.dashboard-light-mode .cell--context{color:#b9b9c5}.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--context{color:#68687b}.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--context:hover,.clockface--app-wrapper.dashboard-light-mode .cell .cell--context.cell--context__active,.clockface--app-wrapper.dashboard-light-mode .cell:hover .cell--context.cell--context__active{color:#00a3ff}.clockface--app-wrapper.dashboard-light-mode .cell--note-indicator{color:#b9b9c5}.clockface--app-wrapper.dashboard-light-mode .cell--note-indicator.cell--note-indicator__active,.clockface--app-wrapper.dashboard-light-mode .cell--note-indicator:hover,.cell:hover .clockface--app-wrapper.dashboard-light-mode .cell--note-indicator:hover{color:#00a3ff}.clockface--app-wrapper.dashboard-light-mode .markdown-format{color:#4d4d60}.clockface--app-wrapper.dashboard-light-mode .markdown-format strong{color:#333346}.clockface--app-wrapper.dashboard-light-mode .markdown-format code{background-color:#f1f1f3;color:#be2ee4}.clockface--app-wrapper.dashboard-light-mode .markdown-format pre{background-color:#f1f1f3}.clockface--app-wrapper.dashboard-light-mode .markdown-cell .cf-dapper-scrollbars--track-y{background-color:#f1f1f3 !important}.clockface--app-wrapper.dashboard-light-mode .cell--view-empty{color:#9e9ead}.clockface--app-wrapper.dashboard-light-mode .variables-control-bar--empty,.clockface--app-wrapper.dashboard-light-mode .variables-control-bar--full{background-color:#fff}.clockface--app-wrapper.dashboard-light-mode .react-resizable-handle{border-right-color:#b9b9c5;border-bottom-color:#b9b9c5}.clockface--app-wrapper.dashboard-light-mode .react-resizable-handle:before,.clockface--app-wrapper.dashboard-light-mode .react-resizable-handle:after{background-color:#fff}.clockface--app-wrapper.dashboard-light-mode .react-resizable-handle:hover{border-right-color:#ce58eb;border-bottom-color:#ce58eb}.clockface--app-wrapper.dashboard-light-mode .react-grid-item.resizing .react-resizable-handle,.clockface--app-wrapper.dashboard-light-mode .react-grid-item.react-draggable-dragging .react-resizable-handle{opacity:1;border-right-color:#ce58eb;border-bottom-color:#ce58eb}.copy-bucket-id{transition:color .25s ease}.copy-bucket-id:hover{cursor:pointer;color:#00a3ff}.copy-bucket-id--helper{color:#b9b9c5;transition:opacity .25s ease;opacity:0;display:inline-block;margin-left:8px}.copy-bucket-id:hover .copy-bucket-id--helper{opacity:1}.rate-limit-overlay .rate-limit-overlay--content{display:inline-flex;flex-direction:column;align-items:center;justify-content:flex-start;text-align:center}.rate-limit-overlay .rate-limit-overlay--content .rate-limit-overlay--image{background-position:center center;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_10___ + \");flex-shrink:0;width:247px;height:260px}.rate-limit-overlay h4{margin:8px 0}.rate-limit-overlay .rate-alert--request-increase{color:#00a3ff;font-weight:700;cursor:pointer}.rate-limit-overlay .rate-alert--request-increase:hover,.rate-limit-overlay .rate-alert--request-increase:focus{color:#00c9ff;transition:color .25s ease}.rate-limit-overlay .rate-alert-form-details{height:400px}.rate-limit-overlay .rate-alert--request-increase-button{display:inline-block}@media screen and (min-width: 750px){.rate-limit-overlay .rate-limit-overlay--content{flex-direction:row-reverse;align-items:center;justify-content:space-around;text-align:left}.rate-limit-overlay .rate-limit-overlay--content .rate-limit-overlay--image{width:40%}.rate-limit-overlay form{width:60%}}.dataless-empty-state--docs-link{font-weight:500}.dataless-empty-state--image{background-position:center center;background-size:contain;background-repeat:no-repeat;background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_11___ + \");margin-bottom:16px;width:270px;height:200px}.notification--button{display:inline-block;margin:4px;margin-right:0}.notification--message{display:inline-block;margin-right:4px}.user-list-invite--form-panel{margin-bottom:36px}.user-list-invite--form-panel .user-list-invite--form-heading{color:#bef0ff}.user-list-invite--form{display:inline-flex;flex-direction:row;justify-content:flex-start;align-items:flex-end}.user-list-invite--form .element{margin-right:8px;flex-basis:150px}.user-list-invite--form .element label{color:#bef0ff}.user-list-invite--form .email--input{flex-grow:1;max-width:450px}.user-role--dropdown--button,.user-role--dropdown-item,.user-role--dropdown-item,.user-list-cell-role,.user-list-cell-role,.user-list-cell-status{text-transform:capitalize}.user-list-email{font-weight:bold}.cancellation-overlay .cancellation-overlay--content{margin-top:16px}.agree-terms-input{width:33px !important}.plan-type-panel .cf-panel--body.cf-flex-box__column{flex-direction:column}.plan-type-panel .plan-type-panel--detail{flex-grow:1;flex-basis:100%;margin-bottom:4px}.plan-type-panel .plan-type-panel--detail:last-child{margin-bottom:0}.plan-type-panel .plan-type-panel--detail .cf-panel--body{font-weight:500;font-size:var(--step-1);line-height:var(--step-1)}.plan-type-panel .plan-type-panel--detail .cf-panel--body span.money{color:#2fa74d;font-weight:700}.plan-type-panel .plan-type-panel--detail .billing--update-frequency{font-size:var(--step--1);text-align:right;color:#68687b}.cf-heading.section-header{width:100%;font-size:var(--step-5);margin:32px 0;text-align:center;display:flex;flex-direction:column;align-items:center}.cf-heading.section-header small{letter-spacing:0;font-size:19px;margin:0;margin-top:10px;font-weight:500}@media screen and (min-width: 750px){.plan-type-panel .cf-panel--body.cf-flex-box__column{flex-direction:row}.plan-type-panel .cf-grid--row{display:inline-flex}.plan-type-panel .plan-type-panel--detail{flex-grow:1;margin-bottom:0;margin-right:16px}.plan-type-panel .plan-type-panel--detail:last-child{margin-bottom:0;margin-right:0}.plan-type-panel .usage--plot{min-height:250px}.plan-type-panel .usage--plot::after{content:\\\"\\\";display:block;width:100%;padding-top:38%}.plan-type-panel .graph-type--panel{flex-grow:1;margin-bottom:0;margin-right:16px;margin-top:0}.plan-type-panel .graph-type--panel:last-child{margin-bottom:0;margin-right:0}}.service-cancellation-reasons-form{margin:10px 0;width:100%}.service-cancellation-reasons-form>.cf-form--element{padding:5px 0}.service-cancellation-reasons-form>.cf-form--element>.improvement-suggestions-input{height:120px}.org-limit{margin:0 0 16px;position:relative}.org-limit--stat{text-align:right;font-size:var(--step-4);font-weight:500;color:#f1f1f3}.cf-grid--container .credit-250-conversion-panel{margin-top:32px;padding-bottom:64px}.cf-grid--container .credit-250-conversion-panel .credit-250-conversion-panel--message{margin-top:var(--step-1)}.cf-grid--container .credit-250-conversion-panel .credit-250-conversion-panel--header{margin-top:8px;margin-bottom:8px}.cf-grid--container .credit-250-conversion-panel .credit-250-conversion-upgrade--button{margin-top:32px}.conversion-panel--list{-webkit-columns:2 250px;-moz-columns:2 250px;columns:2 250px;margin:var(--step-1) 0}.conversion-panel--benefits,.credit-250-conversion-panel--benefits{list-style:none;margin:0}.conversion-panel--benefits>li,.credit-250-conversion-panel--benefits>li{font-size:var(--step-1);padding-left:32px;position:relative;margin:0;margin-bottom:16px}.conversion-panel--benefits>li:before,.credit-250-conversion-panel--benefits>li:before{content:\\\"\\\";position:absolute;left:0;border-radius:50%}.credit-250-conversion-panel--benefits>li:before{width:var(--step--1);height:var(--step--1);background-color:#fff;top:calc(var(--step--1)*.5)}.conversion-panel--benefits>li:before{width:var(--step-1);height:var(--step-1);background-color:#00a3ff}p.conversion-panel--final-p{font-size:var(--step-3);text-align:center;margin-bottom:0}.billing-form--frame{position:relative}.billing--contact-info,.billing--contact-info *{color:#d5d5dd;height:30px;padding:8px 11px;font-size:12px;font-weight:600}.billing-contact--alert{margin-bottom:16px}.payment-method-panel strong{color:#00c9ff;margin-bottom:32px}.billing-notification p{display:inline;text-align:left;justify-content:left}.billing-notification button{text-align:right;float:right;justify-content:right}.list-item{margin-bottom:4px;padding:16px 24px 16px 16px;background-color:#1a1a2a;border-radius:2px;width:100%}.list-item .invoice-details{text-align:right}.list-item:hover{background-color:#333346}.invoice-status{width:80px}.invoice-status.paid{color:#2fa74d}.invoice-headers{justify-content:space-between}.invoice-headers .invoice-header{text-align:right}.invoice-headers .invoice-header:first-of-type{margin-left:0;text-align:left}.panel-body--size{position:relative;min-height:75px}.usage--billing-header.cf-panel--header{justify-content:flex-start}.usage--panel .panel--body{position:relative}.billing-stats--panel{margin-bottom:16px !important}.billing-stats--panel .cf-panel{margin-bottom:4px}@media screen and (min-width: 1080px){.billing-stats--panel .cf-panel{margin-bottom:0}}.usage-tooltip{margin-left:8px}.billing-stats--graph-body{min-height:120px}.value-tick-input--custom{padding-top:8px}.logo-with-cubo{display:flex}.logo-with-cubo>.cubo-logo{font-size:var(--step-4);padding-right:8px;color:#fff;line-height:1.5}.logo-with-cubo>.influx-cloud-logo{width:150px;height:50px;display:flex}.powered-by-stripe-logo .white-fill{fill:#fff}.checkout-overlay--title{color:#d5d5dd;font-size:18px;font-weight:500;margin-bottom:8px;text-align:center;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.checkout-overlay--title,.checkout-overlay--title:hover{cursor:default}.checkout-overlay--sub-title{color:#d5d5dd;font-size:14px;font-weight:400;margin-top:8px;margin-bottom:32px;text-align:center;user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.checkout-overlay--sub-title,.checkout-overlay--sub-title:hover{cursor:default}.checkout-overlay--view__empty{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_12___ + \");background-position:center center;background-repeat:no-repeat;background-size:cover;height:230px;margin:16px 0}.cf-funnel-page--title.checkout-header{margin-top:0;padding:32px 0}.v2-zuora-form iframe{min-height:226px}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.cf-funnel-page--footer .cf-cta-button{margin:16px 0}.powered-by-payment-header{width:100%}.billing-form--frame{position:relative}.v2-zuora-form{min-height:226px}.checkout--panel{overflow:hidden;max-height:140px}.checkout-credit-250--banner{font-size:18px;display:flex;flex-direction:row;justify-content:center}.checkout-credit-250--banner-icon{padding-top:1px}.checkout-credit-250--banner-message{margin-left:8px}.checkout-form--banner{background:linear-gradient(45deg, rgb(52, 187, 85) 0%, rgb(0, 163, 255) 100%);box-sizing:border-box;position:absolute;top:0px;right:35px;width:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000;transform:translate(50%) rotate(45deg);transform-origin:center;padding-right:15px}.checkout-form--banner p{margin:8px 0px}.checkout-form--banner .checkout-banner--credit{margin-top:8px;color:#000}#zuora_payment>iframe{background-color:rgba(0,0,0,0);width:100%}@media screen and (max-width: 1080px){.checkout-form--banner{position:relative;height:auto;display:flex;rotate:0deg;bottom:0;top:0;left:0;flex-direction:row;width:100%;transform:translate(0%) rotate(0deg);border-radius:8px}.checkout-form--banner .checkout-banner--credit{margin-top:0px;padding-right:8px}.checkout--panel{height:auto;max-height:none}}.operator-limits-label{border:none;overflow:hidden;display:inline-block;justify-content:flex-start;padding:0 12px}.operator-nav-button{background:#00a3ff;background:-moz-linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);background:-webkit-linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);background:linear-gradient(45deg, #00a3ff 0%, #2fa74d 100%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr=\\\"$startColor\\\", endColorstr=\\\"$endColor\\\",GradientType=1 );border-radius:100%;border:none;overflow:hidden;display:inline-block;justify-content:flex-start;margin-right:40px}.operator-nav-button .cf-button-icon{text-align:center;margin-top:4px;font-size:32px}.operator-nav-popover{display:flex}.overlay-header--color.overlay-header--title{color:#fff;justify-content:center;user-select:text !important;-moz-user-select:text !important;-webkit-user-select:text !important;-ms-user-select:text !important;-o-user-select:text !important}.cf-overlay--body .overlay-button--link{padding:8px 16px}.cf-text-block.account-grid-text{background-color:rgba(0,0,0,0);font-size:medium;margin:-5px 0px;padding:0px}.account-grid-text.heading{color:#a5a8b5;margin-top:20px}.account-grid-text.body{color:#d4d7dc;font-weight:700}.contract-start-date-picker{top:50%;left:50%;transform:translate(0, -50%)}.cancellation-reasons-form{margin:10px 0;width:100%}.cancellation-reasons-form>.cf-form--element{padding:5px 0}.cancellation-reasons-form>.cf-form--element>.improvement-suggestions-input{height:120px}.csv-upload--button{margin:10px;min-width:100px}.write-data--uploader-wrapper{margin:1em 0}.secrets-context-menu{padding-right:16px}.alert{margin-bottom:8px}.secrets-dropdown-header{border-bottom:2px solid #333346}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.dnd-container{display:flex;align-items:center}.dnd-container .dnd{border:2px dashed gray;border-radius:3px}.dnd-container .dnd.hasError{border-color:#dc4e58;color:#dc4e58}.dnd-container .dnd input[type=file].drag-and-drop--input{display:none}.dnd-container .dnd .display-area{min-width:150px;padding:10px;text-align:center}.dnd-container .dnd .display-area.active{color:#000}.dnd-container .dnd.active{background:#d3d3d3}.schema-section .option{margin-bottom:6px !important}.measurement-section .option:nth-child(3){margin-left:10px}.schema-section.measurement,.measurement-section.measurement{margin-top:15px}.schema-section .schema-name-input,.measurement-section .schema-name-input{margin-right:10px;width:205px !important}.schema-section .file-name-read-only,.measurement-section .file-name-read-only{width:100%;height:40px;font-size:small;padding-top:12px}.schema-section .add-schema-uploader.drag-and-drop,.measurement-section .add-schema-uploader.drag-and-drop{height:40px;border-color:#d3d3d3;width:155px}.schema-section .add-schema-uploader.drag-and-drop.has-file,.measurement-section .add-schema-uploader.drag-and-drop.has-file{border:none}.schema-section .add-schema-uploader.drag-and-drop .drag-and-drop--header,.measurement-section .add-schema-uploader.drag-and-drop .drag-and-drop--header{font-size:small;padding-top:12px;color:#d3d3d3}.schema-section .header,.measurement-section .header{margin-bottom:10px}.schema-section .header .subtext,.measurement-section .header .subtext{margin-top:6px;font-weight:300}.schema-section .title-text,.measurement-section .title-text{color:#b9b9c5;font-weight:500}.schema-section .value-text,.measurement-section .value-text{color:#fff;font-weight:500;margin-top:8px}.schema-section .measurement-schema-panel-container,.measurement-section .measurement-schema-panel-container{width:100%;padding-left:8px;border-radius:10px}.schema-section .measurement-schema-panel-container .measurement-schema-panel,.measurement-section .measurement-schema-panel-container .measurement-schema-panel{width:100%;margin-right:5px;margin-left:5px}.schema-section .measurement-schema-panel-container .measurement-schema-panel .download-button,.measurement-section .measurement-schema-panel-container .measurement-schema-panel .download-button{margin-right:9px}.schema-section .measurement-schema-panel-container .measurement-schema-panel .schema-row,.measurement-section .measurement-schema-panel-container .measurement-schema-panel .schema-row{justify-content:space-between;width:93%;margin-bottom:8px}.schema-section .measurement-schema-panel-container .measurement-schema-panel .schema-row.hasCancelBtn,.measurement-section .measurement-schema-panel-container .measurement-schema-panel .schema-row.hasCancelBtn{width:98%}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.plugin-create-configuration-name-row,.plugin-create-configuration-description-row{display:flex;align-items:flex-end}.plugin-create-configuration-copy-to-clipboard--button,.plugin-create-configuration-download--button{margin-bottom:8px}.plugin-create-configuration-customize-editor,.plugin-edit-configuration--editor{margin-top:8px;height:55vh;width:100%;position:relative;display:inline-flex;flex-direction:column}.plugin-create-configuration--agent-notification{font-weight:900;font-size:var(--step-2);color:#ff4d96}.plugin-create-configuration--popover-contents{font-size:var(--step--1)}.main-flexbox-child{width:100%}.flex-box-label{text-align:\\\"start\\\";margin:5px 0px}.flexbox-child-label-read{align-items:\\\"left\\\";margin-left:20px}.flexbox-child-label-write{align-items:\\\"left\\\";margin-left:20px}.input-label-read{margin-left:15px}.input-label-write{margin-right:50px}.resource-accordion-body{padding-top:10px;padding-bottom:10px;font-weight:bold}.resource-accordion-error{justify-content:center;color:gray}.overlay-header{text-align:center}.overlay-footer{display:grid;justify-content:center}.version-sidebar--buttons{display:flex;justify-content:space-between;padding:0 16px}.version-history--title{font-weight:500;font-size:20px;line-height:1.2}.published-date--text{font-weight:normal;font-size:15.75px;line-height:1.6;margin:0px 0px;color:#fff}.published-by--text{font-weight:normal;line-height:160%;color:#9e9ead;margin:0px 0px}.cf-list--contents .cf-list-item__light.version-sidebar--listitem{display:flex;justify-content:space-between;padding:16px}.version-sidebar{flex:0 0 420px;width:420px;padding:0 8px}.version-sidebar .sidebar--item{width:137px;height:137px}.version-sidebar .sidebar--item .cf-selectable-card--body{overflow:hidden}.version-sidebar .sidebar--item .cf-selectable-card--children{width:calc(100% - 48px);height:calc(100% - 48px)}.version-sidebar .sidebar--item-thumb{width:100%;height:100%}.version-sidebar .sidebar--item-thumb img{width:100%;height:100%;object-fit:contain}.version-sidebar .flux-toolbar--search{padding:0}.version-sidebar--submenu{padding-top:8px;height:calc(100% - 30px)}.version-sidebar--submenu-wrapper{padding-bottom:20px}.version-header--timerange{font-style:normal;font-weight:500;font-size:20px;line-height:1.2;margin-right:16px}.version-sidebar--back-btn{margin:0px 10px 12px}.view-options--band-column-dropdown-error{margin:4px;color:#dc4e58}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.wizard--credits,.cell--view-empty{user-select:none !important;-moz-user-select:none !important;-webkit-user-select:none !important;-ms-user-select:none !important;-o-user-select:none !important}.wizard--credits,.cell--view-empty{cursor:default}.context-menu--list{box-shadow:0 0 10px 2px #07070e}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.u-flex{display:flex;flex-wrap:wrap}.u-flex.u-jc-flex-start{justify-content:flex-start}.u-flex.u-jc-flex-end{justify-content:flex-end}.u-flex.u-jc-center{justify-content:center}.u-flex.u-jc-space-between{justify-content:space-between}.u-flex.u-jc-space-around{justify-content:space-around}.u-flex.u-ai-flex-start{align-items:flex-start}.u-flex.u-ai-flex-end{align-items:flex-end}.u-flex.u-ai-center{align-items:center}.u-flex.u-ai-stretch{align-items:stretch}.u-flex.u-ai-baseline{align-items:baseline}.u-flex.u-ac-flex-start{align-content:flex-start}.u-flex.u-ac-flex-end{align-content:flex-end}.u-flex.u-ac-center{align-content:center}.u-flex.u-ac-stretch{align-content:stretch}.u-flex.u-ac-space-between{align-content:space-between}.u-flex.u-ac-space-around{align-content:space-around}.margin-zero{margin:0 !important}.margin-bottom-zero{margin-bottom:0 !important}.margin-top-zero{margin-top:0 !important}.margin-left-zero{margin-left:0 !important}.margin-right-zero{margin-right:0 !important}.padding-zero{padding:0 !important}.padding-bottom-zero{padding-bottom:0 !important}.padding-top-zero{padding-top:0 !important}.padding-left-zero{padding-left:0 !important}.padding-right-zero{padding-right:0 !important}h1#first-mile--header{margin:1em 0}.homepage-wizard-container{color:#f1f1f3;display:flex;height:100%;width:100%}.homepage-wizard-container--subway-inner{width:100%;position:sticky;top:0}.homepage-wizard-container--subway{display:flex;flex-direction:column;width:30%}.homepage-wizard-container--main{display:flex;flex-direction:column;width:70%;flex:1;padding-bottom:64px}.homepage-wizard-container--main-wrapper h1{margin-top:0;font-weight:600}.homepage-wizard-container--main-wrapper p{font-size:var(--step-1)}.homepage-wizard-container--main-wrapper.verticallyCentered{margin-top:auto}.homepage-wizard-container-footer{display:flex;justify-content:flex-end;margin-top:auto}.write-data--details-widget-title{margin-bottom:8px;padding-left:12px;display:flex;justify-content:space-between;align-items:center;text-transform:uppercase}.homepage-wizard-next-steps{display:flex;max-width:300px;margin-top:0 !important}.homepage-wizard-next-steps h4{background:linear-gradient(45deg, #fad9ff 0%, #f0fcff 100%);-webkit-background-clip:text;-webkit-text-fill-color:rgba(0,0,0,0);display:flex;align-items:center;margin:0}.homepage-wizard-next-steps h4 svg{margin-right:10px}.homepage-wizard-next-steps p{font-size:14px;margin:0;font-style:normal;font-weight:300;line-height:17px;text-align:left}.homepage-wizard-next-steps h5{display:flex;align-items:center;justify-content:center;letter-spacing:.06em;margin:0}.feedback-bar{background:linear-gradient(256.11deg, rgba(147, 148, 255, 0.2) 0%, rgba(81, 60, 198, 0.2) 100%);padding-left:16px;padding-right:16px;max-width:493px}.homepage-wizard--code-highlight{color:#b7b8ff}.recent-dashboards{display:flex;flex-direction:column;align-items:stretch;font-size:1.25em}.recent-dashboards--item{margin-bottom:8px;white-space:nowrap;word-break:break-all;padding-right:16px}.recent-dashboards--filter{margin-bottom:8px}.docslinks-list,.useful-links{padding:0;list-style:none}.docslinks-list h4,.useful-links h4{color:#f1f1f3}.docslinks-list>li{font-size:1.25em;background-color:rgba(0,0,0,0);border-radius:4px;padding:0;margin-bottom:16px}.cf-resource-card{margin-bottom:2px}\", \"\"]);\n// Exports\nmodule.exports = exports;\n","module.exports = __webpack_public_path__ + \"cf18aac2f5.svg\";","module.exports = __webpack_public_path__ + \"24e3b8ba6e.svg\";","module.exports = __webpack_public_path__ + \"68ce87408b.svg\";","module.exports = __webpack_public_path__ + \"79ccf921bd.svg\";","module.exports = __webpack_public_path__ + \"219c39c51b.png\";","module.exports = __webpack_public_path__ + \"6c896bd2ec.png\";","module.exports = __webpack_public_path__ + \"461f20994a.svg\";","module.exports = __webpack_public_path__ + \"756cfeadfd.svg\";","module.exports = __webpack_public_path__ + \"953508f236.svg\";","module.exports = __webpack_public_path__ + \"68d119b876.svg\";","module.exports = __webpack_public_path__ + \"a7f54bda3a.svg\";","import {SubwayNavModel} from '@influxdata/clockface'\n\nexport enum BrokerAuthTypes {\n None = 'none',\n User = 'user',\n Certificate = 'certificate',\n}\n\nexport interface Subscription {\n id?: string\n name?: string\n description?: string\n protocol?: string\n orgID?: string\n processGroupID?: string\n brokerHost?: string\n brokerPort?: number\n brokerUsername?: string\n brokerPassword?: string\n topic?: string\n dataFormat?: string\n jsonMeasurementKey?: JsonSpec\n jsonFieldKeys?: JsonSpec[]\n jsonTagKeys?: JsonSpec[]\n jsonTimestamp?: JsonSpec\n stringMeasurement: StringObjectParams\n stringFields?: StringObjectParams[]\n stringTags?: StringObjectParams[]\n stringTimestamp?: StringObjectParams\n status?: string\n bucket?: string\n createdAt?: Date\n updatedAt?: Date\n createdBy?: string\n updatedBy?: string\n tokenID?: string\n token?: string\n isActive?: string\n flowVersion?: number\n timestampPrecision?: string\n notebookID?: string\n brokerClientKey?: string\n brokerClientCert?: string\n brokerCACert?: string\n authType: BrokerAuthTypes\n brokerCertCreationDate?: string\n}\n\nexport interface SubscriptionStatus {\n isActive?: boolean\n processors?: any\n processGroupID?: string\n id: string\n}\n\nexport interface JsonSpec {\n path?: string\n name?: string\n type?: string\n}\n\nexport interface StringObjectParams {\n pattern?: string\n name?: string\n}\n\nexport enum PrecisionTypes {\n Milliseconds = 'MS',\n Seconds = 'S',\n Microseconds = 'US',\n Nanoseconds = 'NS',\n}\n\nexport enum Steps {\n BrokerForm = 'broker',\n SubscriptionForm = 'subscription',\n ParsingForm = 'parsing',\n}\n\nexport interface StepsStatus {\n currentStep: Steps\n clickedStep: string\n brokerStepCompleted: string\n subscriptionStepCompleted: string\n parsingStepCompleted: string\n dataFormat: string\n}\n\nexport interface CompletedSteps {\n [Steps.BrokerForm]: boolean\n [Steps.SubscriptionForm]: boolean\n [Steps.ParsingForm]: boolean\n}\n\nexport interface SubscriptionNavigationModel extends SubwayNavModel {\n type: string\n}\n","// Types\nimport {RemoteDataState, LabelEntities} from 'src/types'\nimport {Action as NotifyAction} from 'src/shared/actions/notifications'\nimport {NormalizedSchema} from 'normalizr'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | NotifyAction\n\nexport const SET_LABELS = 'SET_LABELS'\nexport const SET_LABEL = 'SET_LABEL'\nexport const REMOVE_LABEL = 'REMOVE_LABEL'\nexport const SET_LABEL_ON_RESOURCE = 'SET_LABEL_ON_RESOURCE'\n\ntype LabelsSchema = NormalizedSchema<\n LabelEntities,\n R\n>\n\nexport const setLabels = (\n status: RemoteDataState,\n schema?: LabelsSchema\n) =>\n ({\n type: SET_LABELS,\n status,\n schema,\n } as const)\n\nexport const setLabel = (\n id: string,\n status: RemoteDataState,\n schema?: LabelsSchema\n) =>\n ({\n type: SET_LABEL,\n id,\n status,\n schema,\n } as const)\n\nexport const removeLabel = (id: string) =>\n ({\n type: REMOVE_LABEL,\n id,\n } as const)\n\nexport const setLabelOnResource = (\n resourceID: string,\n schema: LabelsSchema\n) =>\n ({\n type: SET_LABEL_ON_RESOURCE,\n resourceID,\n schema,\n } as const)\n","// Constants\nimport {FLUX_RESPONSE_BYTES_LIMIT, API_BASE_PATH} from 'src/shared/constants'\nimport {\n RATE_LIMIT_ERROR_STATUS,\n RATE_LIMIT_ERROR_TEXT,\n GATEWAY_TIMEOUT_STATUS,\n REQUEST_TIMEOUT_STATUS,\n} from 'src/cloud/constants'\n\n// Types\nimport {CancelBox} from 'src/types/promises'\nimport {File, Query, CancellationError} from 'src/types'\nimport {event} from 'src/cloud/utils/reporting'\nimport {getFlagValue} from 'src/shared/utils/featureFlag'\n\nexport type RunQueryResult =\n | RunQuerySuccessResult\n | RunQueryLimitResult\n | RunQueryErrorResult\n\nexport interface RunQuerySuccessResult {\n type: 'SUCCESS'\n csv: string\n didTruncate: boolean\n bytesRead: number\n}\n\nexport interface RunQueryLimitResult {\n type: 'RATE_LIMIT_ERROR'\n retryAfter: number\n message: string\n}\n\nexport interface RunQueryErrorResult {\n type: 'UNKNOWN_ERROR'\n message: string\n code?: string\n}\n\nexport const runQuery = (\n orgID: string,\n query: string,\n extern?: File,\n abortController?: AbortController\n): CancelBox => {\n const url = `${API_BASE_PATH}api/v2/query?${new URLSearchParams({orgID})}`\n\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept-Encoding': 'gzip',\n }\n\n const body: Query = {\n query,\n extern,\n dialect: {annotations: ['group', 'datatype', 'default']},\n }\n\n const controller = abortController || new AbortController()\n\n const request = fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n signal: controller?.signal,\n })\n\n const promise = request\n .then(processResponse)\n .catch(e =>\n e.name === 'AbortError'\n ? Promise.reject(new CancellationError())\n : Promise.reject(e)\n )\n\n return {\n promise,\n cancel: () => controller.abort(),\n }\n}\n\nexport const processResponse = async (\n response: Response\n): Promise => {\n switch (response.status) {\n case 200:\n return processSuccessResponse(response)\n case RATE_LIMIT_ERROR_STATUS:\n return processRateLimitResponse(response)\n default:\n return processErrorResponse(response)\n }\n}\n\nconst processSuccessResponse = async (\n response: Response\n): Promise => {\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n\n let csv = ''\n let bytesRead = 0\n let didTruncate = false\n\n let read = await reader.read()\n\n const BYTE_LIMIT =\n getFlagValue('increaseCsvLimit') ?? FLUX_RESPONSE_BYTES_LIMIT\n\n while (!read.done) {\n const text = decoder.decode(read.value)\n\n bytesRead += read.value.byteLength\n\n if (bytesRead > BYTE_LIMIT) {\n csv += trimPartialLines(text)\n didTruncate = true\n break\n } else {\n csv += text\n read = await reader.read()\n }\n }\n\n reader.cancel()\n\n return {\n type: 'SUCCESS',\n csv,\n bytesRead,\n didTruncate,\n }\n}\n\nconst processRateLimitResponse = (response: Response): RunQueryLimitResult => {\n const retryAfter = response.headers.get('Retry-After')\n\n return {\n type: 'RATE_LIMIT_ERROR',\n retryAfter: retryAfter ? parseInt(retryAfter) : null,\n message: RATE_LIMIT_ERROR_TEXT,\n }\n}\n\nconst processErrorResponse = async (\n response: Response\n): Promise => {\n try {\n const body = await response.text()\n const json = JSON.parse(body)\n const message = json.message || json.error\n const code = json.code\n\n switch (code) {\n case REQUEST_TIMEOUT_STATUS:\n event('shared query timeout')\n break\n case GATEWAY_TIMEOUT_STATUS:\n event('shared gateway timeout')\n break\n default:\n event('shared query error')\n }\n\n return {type: 'UNKNOWN_ERROR', message, code}\n } catch {\n return {type: 'UNKNOWN_ERROR', message: 'Failed to execute Flux query'}\n }\n}\n\n/*\n Given an arbitrary text chunk of a Flux CSV, trim partial lines off of the end\n of the text.\n\n For example, given the following partial Flux response,\n\n r,baz,3\n foo,bar,baz,2\n foo,bar,b\n\n we want to trim the last incomplete line, so that the result is\n\n r,baz,3\n foo,bar,baz,2\n\n*/\nconst trimPartialLines = (partialResp: string): string => {\n let i = partialResp.length - 1\n\n while (partialResp[i] !== '\\n') {\n if (i <= 0) {\n return partialResp\n }\n\n i -= 1\n }\n\n return partialResp.slice(0, i + 1)\n}\n","import React, {FC, createContext, useCallback} from 'react'\nimport {TimeRange, RecursivePartial} from 'src/types'\nimport {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {useSessionStorage} from 'src/dataExplorer/shared/utils'\nimport {Bucket, TagKeyValuePair} from 'src/types'\nimport {\n RESOURCES,\n ResourceConnectedQuery,\n} from 'src/dataExplorer/components/resources'\n\ninterface SchemaComposition {\n synced: boolean // true == can modify session's schema\n diverged: boolean // true == cannot re-sync. (e.g. user has typed in the composition block)\n}\n\nexport interface SchemaSelection {\n bucket: Bucket\n measurement: string\n fields: string[]\n tagValues: TagKeyValuePair[]\n composition: SchemaComposition\n}\n\ninterface ContextType {\n hasChanged: boolean\n horizontal: number[]\n vertical: number[]\n range: TimeRange\n query: string\n resource: ResourceConnectedQuery\n selection: SchemaSelection\n\n setHasChanged: (hasChanged: boolean) => void\n setHorizontal: (val: number[]) => void\n setVertical: (val: number[]) => void\n setRange: (val: TimeRange) => void\n setQuery: (val: string) => void\n setResource: (val: ResourceConnectedQuery) => void\n setSelection: (val: RecursivePartial) => void\n clearSchemaSelection: () => void\n\n save: () => Promise>\n}\n\nexport const DEFAULT_SCHEMA: SchemaSelection = {\n bucket: null,\n measurement: null,\n fields: [] as string[],\n tagValues: [] as TagKeyValuePair[],\n composition: {\n synced: true,\n diverged: false,\n },\n}\n\nexport const DEFAULT_EDITOR_TEXT =\n '// Start by selecting data from the schema browser or typing flux here'\n\nconst DEFAULT_CONTEXT = {\n hasChanged: false,\n horizontal: [0.5],\n vertical: [0.25, 0.8],\n range: DEFAULT_TIME_RANGE,\n query: DEFAULT_EDITOR_TEXT,\n resource: null,\n selection: JSON.parse(JSON.stringify(DEFAULT_SCHEMA)),\n\n setHasChanged: (_: boolean) => {},\n setHorizontal: (_: number[]) => {},\n setVertical: (_: number[]) => {},\n setRange: (_: TimeRange) => {},\n setQuery: (_: string) => {},\n setResource: (_: any) => {},\n setSelection: (_: RecursivePartial) => {},\n clearSchemaSelection: () => {},\n save: () => Promise.resolve(null),\n}\n\nexport const PersistanceContext = createContext(DEFAULT_CONTEXT)\n\nexport const PersistanceProvider: FC = ({children}) => {\n const [horizontal, setHorizontal] = useSessionStorage(\n 'dataExplorer.resize.horizontal',\n [...DEFAULT_CONTEXT.horizontal]\n )\n const [hasChanged, setHasChanged] = useSessionStorage(\n 'dataExplorer.hasChanged',\n DEFAULT_CONTEXT.hasChanged\n )\n const [vertical, setVertical] = useSessionStorage(\n 'dataExplorer.resize.vertical',\n [...DEFAULT_CONTEXT.vertical]\n )\n const [query, setQuery] = useSessionStorage(\n 'dataExplorer.query',\n DEFAULT_CONTEXT.query\n )\n const [range, setRange] = useSessionStorage(\n 'dataExplorer.range',\n DEFAULT_CONTEXT.range\n )\n const [resource, setResource] = useSessionStorage('dataExplorer.resource', {\n type: 'scripts',\n flux: '',\n data: {},\n })\n const [selection, setSelection] = useSessionStorage(\n 'dataExplorer.schema',\n JSON.parse(JSON.stringify(DEFAULT_CONTEXT.selection))\n )\n\n const handleSetQuery = text => {\n if (hasChanged === false) {\n setHasChanged(true)\n }\n setQuery(text)\n }\n\n const handleSetResource = useCallback(\n (resource: any) => {\n if (hasChanged === false) {\n setHasChanged(true)\n }\n setResource(resource)\n },\n [hasChanged]\n )\n\n const clearSchemaSelection = () => {\n setSelection(JSON.parse(JSON.stringify(DEFAULT_SCHEMA)))\n }\n\n const setSchemaSelection = useCallback(\n schema => {\n if (selection.composition?.diverged && schema.composition.synced) {\n return\n }\n const nextState: SchemaSelection = {\n ...selection,\n ...schema,\n composition: {\n ...(selection.composition || {}),\n ...(schema.composition || {}),\n },\n }\n if (hasChanged === false) {\n setHasChanged(true)\n }\n setSelection(nextState)\n },\n [\n hasChanged,\n selection.composition,\n selection.fields,\n selection.tagValues,\n setSelection,\n ]\n )\n\n const save = () => {\n if (!resource || !RESOURCES[resource.type]) {\n return Promise.resolve(null)\n }\n\n resource.flux = query\n\n return RESOURCES[resource.type].persist(resource).then(data => {\n handleSetResource(data)\n setHasChanged(false)\n return data\n })\n }\n\n return (\n \n {children}\n \n )\n}\n","import {Cell, Dashboard, RemoteDataState} from 'src/types'\nimport {DecimalPlaces} from 'src/types'\n\nimport {SortTypes} from 'src/shared/utils/sort'\nimport {Sort} from '@influxdata/clockface'\nimport {DashboardSortKey} from 'src/shared/components/resource_sort_dropdown/generateSortItems'\n\nexport const UNTITLED_GRAPH: string = 'Untitled Graph'\n\nexport const DEFAULT_DECIMAL_PLACES: DecimalPlaces = {\n isEnforced: true,\n digits: 2,\n}\n\nexport type NewDefaultCell = Pick<\n Cell,\n Exclude\n>\n\nexport const NEW_DEFAULT_DASHBOARD_CELL: NewDefaultCell = {\n x: 0,\n y: 0,\n w: 4,\n h: 4,\n status: RemoteDataState.Done,\n}\n\nexport type EmptyDefaultDashboard = Pick<\n Dashboard,\n Exclude<\n keyof Dashboard,\n 'templates' | 'links' | 'organization' | 'cells' | 'labels' | 'orgID'\n >\n> & {\n cells: NewDefaultCell[]\n}\n\nexport const DEFAULT_DASHBOARD_SORT_OPTIONS = {\n sortDirection: Sort.Ascending,\n sortType: SortTypes.String,\n sortKey: 'name' as DashboardSortKey,\n}\n\nexport const DashboardTemplate: EmptyDefaultDashboard = {\n id: '0',\n name: 'Create a New Dashboard',\n cells: [],\n status: RemoteDataState.Done,\n}\n\ntype NewDefaultDashboard = Pick<\n Dashboard,\n Exclude & {\n cells: NewDefaultCell[]\n }\n>\nexport const DEFAULT_CELL_NAME = 'Name this Cell'\nexport const DEFAULT_DASHBOARD_NAME = 'Name this Dashboard'\nexport const DEFAULT_BUCKET_NAME = 'Name this Bucket'\nexport const DEFAULT_COLLECTOR_NAME = 'Name this Collector'\nexport const DEFAULT_TASK_NAME = 'Name this Task'\nexport const DEFAULT_SCRAPER_NAME = 'Name this Scraper'\nexport const DEFAULT_TOKEN_DESCRIPTION = 'Describe this API Token'\n\nexport const NEW_DASHBOARD: NewDefaultDashboard = {\n name: DEFAULT_DASHBOARD_NAME,\n cells: [NEW_DEFAULT_DASHBOARD_CELL],\n}\n\nexport const TYPE_QUERY_CONFIG: string = 'queryConfig'\nexport const TYPE_SHIFTED: string = 'shifted queryConfig'\nexport const TYPE_FLUX: string = 'flux'\nexport const DASHBOARD_NAME_MAX_LENGTH: number = 50\nexport const CELL_NAME_MAX_LENGTH: number = 68\n\nexport enum CEOTabs {\n Queries = 'Queries',\n Vis = 'Visualization',\n}\n\n// used in importing dashboards and mapping sources\nexport const DYNAMIC_SOURCE = 'dynamic'\nexport const DYNAMIC_SOURCE_INFO = {\n name: 'Dynamic Source',\n id: DYNAMIC_SOURCE,\n link: '',\n}\n\nexport const UPDATED_AT_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Notebooks {\n flows?: Notebook[]\n}\n\nexport interface Notebook {\n id?: string\n isDirty?: boolean\n name?: string\n orgID?: string\n spec?: any\n createdAt?: string\n createdBy?: string\n updatedAt?: string\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport interface NotebookParams {\n name?: string\n orgID?: string\n spec?: any\n}\n\nexport interface NotebookVersion {\n notebookVersion?: Notebook\n}\n\nexport type VersionHistories = VersionHistory[]\n\nexport interface VersionHistory {\n id: string\n publishedAt: string\n publishedBy: string\n}\n\nexport type Shares = Share[]\n\nexport interface Share {\n id?: string\n orgID?: string\n notebookID?: string\n accessID?: string\n region?: string\n createdAt?: string\n updatedAt?: string\n}\n\nexport interface ShareParams {\n notebookID?: string\n orgID?: string\n region?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetNotebooksParams {\n query: {\n orgID: string\n }\n}\n\ntype GetNotebooksResult =\n | GetNotebooksOKResult\n | GetNotebooksUnauthorizedResult\n | GetNotebooksInternalServerErrorResult\n\ninterface GetNotebooksOKResult {\n status: 200\n headers: Headers\n data: Notebooks\n}\n\ninterface GetNotebooksUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotebooks = (\n params: GetNotebooksParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/notebooks',\n params,\n options\n ) as Promise\n\nexport interface PostNotebookParams {\n data: NotebookParams\n}\n\ntype PostNotebookResult =\n | PostNotebookOKResult\n | PostNotebookBadRequestResult\n | PostNotebookUnauthorizedResult\n | PostNotebookInternalServerErrorResult\n\ninterface PostNotebookOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface PostNotebookBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostNotebookUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostNotebookInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotebook = (\n params: PostNotebookParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/notebooks',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetNotebooksVersionParams {\n notebookID: string\n id: string\n}\n\ntype GetNotebooksVersionResult =\n | GetNotebooksVersionOKResult\n | GetNotebooksVersionBadRequestResult\n | GetNotebooksVersionUnauthorizedResult\n | GetNotebooksVersionInternalServerErrorResult\n\ninterface GetNotebooksVersionOKResult {\n status: 200\n headers: Headers\n data: NotebookVersion\n}\n\ninterface GetNotebooksVersionBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksVersionUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksVersionInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotebooksVersion = (\n params: GetNotebooksVersionParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/notebooks/${params.notebookID}/versions/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotebooksVersionsParams {\n id: string\n}\n\ntype GetNotebooksVersionsResult =\n | GetNotebooksVersionsOKResult\n | GetNotebooksVersionsBadRequestResult\n | GetNotebooksVersionsUnauthorizedResult\n | GetNotebooksVersionsInternalServerErrorResult\n\ninterface GetNotebooksVersionsOKResult {\n status: 200\n headers: Headers\n data: VersionHistories\n}\n\ninterface GetNotebooksVersionsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksVersionsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksVersionsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotebooksVersions = (\n params: GetNotebooksVersionsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/notebooks/${params.id}/versions`,\n params,\n options\n ) as Promise\n\nexport interface PostNotebooksVersionParams {\n id: string\n}\n\ntype PostNotebooksVersionResult =\n | PostNotebooksVersionOKResult\n | PostNotebooksVersionBadRequestResult\n | PostNotebooksVersionUnauthorizedResult\n | PostNotebooksVersionNotFoundResult\n | PostNotebooksVersionInternalServerErrorResult\n\ninterface PostNotebooksVersionOKResult {\n status: 200\n headers: Headers\n data: any\n}\n\ninterface PostNotebooksVersionBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksVersionUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksVersionNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksVersionInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotebooksVersion = (\n params: PostNotebooksVersionParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2private/notebooks/${params.id}/versions`,\n params,\n options\n ) as Promise\n\nexport interface PostNotebooksCloneParams {\n id: string\n\n data?: {\n orgID?: string\n }\n}\n\ntype PostNotebooksCloneResult =\n | PostNotebooksCloneOKResult\n | PostNotebooksCloneBadRequestResult\n | PostNotebooksCloneUnauthorizedResult\n | PostNotebooksCloneNotFoundResult\n | PostNotebooksCloneInternalServerErrorResult\n\ninterface PostNotebooksCloneOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface PostNotebooksCloneBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksCloneUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksCloneNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksCloneInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotebooksClone = (\n params: PostNotebooksCloneParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2private/notebooks/${params.id}/clone`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetNotebookParams {\n id: string\n}\n\ntype GetNotebookResult =\n | GetNotebookOKResult\n | GetNotebookBadRequestResult\n | GetNotebookUnauthorizedResult\n | GetNotebookInternalServerErrorResult\n\ninterface GetNotebookOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface GetNotebookBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetNotebookUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetNotebookInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotebook = (\n params: GetNotebookParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/notebooks/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface PutNotebookParams {\n id: string\n\n data: NotebookParams\n}\n\ntype PutNotebookResult =\n | PutNotebookOKResult\n | PutNotebookBadRequestResult\n | PutNotebookUnauthorizedResult\n | PutNotebookInternalServerErrorResult\n\ninterface PutNotebookOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface PutNotebookBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutNotebookUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutNotebookInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putNotebook = (\n params: PutNotebookParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/notebooks/${params.id}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PatchNotebookParams {\n id: string\n\n data: NotebookParams\n}\n\ntype PatchNotebookResult =\n | PatchNotebookOKResult\n | PatchNotebookBadRequestResult\n | PatchNotebookUnauthorizedResult\n | PatchNotebookInternalServerErrorResult\n\ninterface PatchNotebookOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface PatchNotebookBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchNotebookUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PatchNotebookInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchNotebook = (\n params: PatchNotebookParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2private/notebooks/${params.id}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteNotebookParams {\n id: string\n}\n\ntype DeleteNotebookResult =\n | DeleteNotebookNoContentResult\n | DeleteNotebookBadRequestResult\n | DeleteNotebookUnauthorizedResult\n | DeleteNotebookNotFoundResult\n | DeleteNotebookInternalServerErrorResult\n\ninterface DeleteNotebookNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteNotebookBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebookUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebookNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebookInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotebook = (\n params: DeleteNotebookParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2private/notebooks/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotebooksShareParams {\n query: {\n orgID: string\n notebookID?: string\n }\n}\n\ntype GetNotebooksShareResult =\n | GetNotebooksShareOKResult\n | GetNotebooksShareUnauthorizedResult\n | GetNotebooksShareInternalServerErrorResult\n\ninterface GetNotebooksShareOKResult {\n status: 200\n headers: Headers\n data: Shares\n}\n\ninterface GetNotebooksShareUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetNotebooksShareInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotebooksShare = (\n params: GetNotebooksShareParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/notebooks/share',\n params,\n options\n ) as Promise\n\nexport interface PostNotebooksShareParams {\n data: ShareParams\n}\n\ntype PostNotebooksShareResult =\n | PostNotebooksShareOKResult\n | PostNotebooksShareBadRequestResult\n | PostNotebooksShareUnauthorizedResult\n | PostNotebooksShareInternalServerErrorResult\n\ninterface PostNotebooksShareOKResult {\n status: 200\n headers: Headers\n data: Share\n}\n\ninterface PostNotebooksShareBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksShareUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostNotebooksShareInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotebooksShare = (\n params: PostNotebooksShareParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/notebooks/share',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteNotebooksShareParams {\n id: string\n}\n\ntype DeleteNotebooksShareResult =\n | DeleteNotebooksShareNoContentResult\n | DeleteNotebooksShareBadRequestResult\n | DeleteNotebooksShareUnauthorizedResult\n | DeleteNotebooksShareNotFoundResult\n | DeleteNotebooksShareInternalServerErrorResult\n\ninterface DeleteNotebooksShareNoContentResult {\n status: 204\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebooksShareBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebooksShareUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebooksShareNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotebooksShareInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotebooksShare = (\n params: DeleteNotebooksShareParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2private/notebooks/share/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface GetApiShareQueryParams {\n id: string\n pipeID: string\n}\n\ntype GetApiShareQueryResult =\n | GetApiShareQueryOKResult\n | GetApiShareQueryBadRequestResult\n | GetApiShareQueryUnauthorizedResult\n | GetApiShareQueryInternalServerErrorResult\n\ninterface GetApiShareQueryOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetApiShareQueryBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetApiShareQueryUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetApiShareQueryInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getApiShareQuery = (\n params: GetApiShareQueryParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/api/share/${params.id}/query/${params.pipeID}`,\n params,\n options\n ) as Promise\n\nexport interface GetApiShareParams {\n id: string\n}\n\ntype GetApiShareResult =\n | GetApiShareOKResult\n | GetApiShareBadRequestResult\n | GetApiShareUnauthorizedResult\n | GetApiShareInternalServerErrorResult\n\ninterface GetApiShareOKResult {\n status: 200\n headers: Headers\n data: Notebook\n}\n\ninterface GetApiShareBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetApiShareUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetApiShareInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getApiShare = (\n params: GetApiShareParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/api/share/${params.id}`,\n params,\n options\n ) as Promise\n","import React, {SFC} from 'react'\n\ninterface Props {\n text: string\n className?: string\n}\n\nconst WaitingText: SFC = ({text, className}) => {\n return
{text}
\n}\n\nexport default WaitingText\n","import {\n setRequestHandler,\n setResponseHandler,\n postSignout,\n} from './generatedRoutes'\nimport {getAPIBasepath} from 'src/utils/basepath'\n\nsetRequestHandler((url: string, query: string, init: RequestInit) => {\n return {\n url: `${getAPIBasepath()}${url}`,\n query,\n init,\n }\n})\n\nsetResponseHandler((status, headers, data) => {\n // if the user is inactive log them out\n // influxdb/http/authentication_middleware.go\n if (status === 403 && data.message === 'User is inactive') {\n postSignout({})\n window.location.href = '/signin'\n }\n\n return {status, headers, data}\n})\n\nexport * from './generatedRoutes'\n","// Constants\nimport {INFERNO, NINETEEN_EIGHTY_FOUR} from '@influxdata/giraffe'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {DEFAULT_CELL_NAME} from 'src/dashboards/constants'\nimport {\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_HIDE_DEFAULT,\n STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n STATIC_LEGEND_SHOW_DEFAULT,\n STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} from 'src/visualization/constants'\nimport {\n DEFAULT_GAUGE_COLORS,\n DEFAULT_THRESHOLDS_LIST_COLORS,\n DEFAULT_THRESHOLDS_GEO_COLORS,\n DEFAULT_THRESHOLDS_TABLE_COLORS,\n} from 'src/shared/constants/thresholds'\nimport {DEFAULT_CHECK_EVERY} from 'src/alerting/constants'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n DEFAULT_AGGREGATE_FUNCTION,\n} from 'src/timeMachine/constants/queryBuilder'\n\n// Types\nimport {\n Axis,\n BandViewProperties,\n Base,\n BuilderConfig,\n CheckType,\n CheckViewProperties,\n Color,\n DashboardQuery,\n GaugeViewProperties,\n GeoViewProperties,\n HeatmapViewProperties,\n HistogramViewProperties,\n LinePlusSingleStatProperties,\n MarkdownViewProperties,\n MosaicViewProperties,\n NewView,\n RemoteDataState,\n ScatterViewProperties,\n SimpleTableViewProperties,\n SingleStatViewProperties,\n StaticLegend,\n TableViewProperties,\n ViewProperties,\n ViewType,\n XYViewProperties,\n} from 'src/types'\nimport {LineHoverDimension} from '@influxdata/giraffe/dist/types'\n\nexport const defaultView = (name: string = DEFAULT_CELL_NAME) => {\n return {\n name,\n status: RemoteDataState.Done,\n }\n}\n\nexport function defaultViewQuery(): DashboardQuery {\n return {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: defaultBuilderConfig(),\n }\n}\n\nexport function defaultBuilderConfig(): BuilderConfig {\n return {\n buckets: [],\n tags: [{key: '_measurement', values: [], aggregateFunctionType: 'filter'}],\n functions: [{name: DEFAULT_AGGREGATE_FUNCTION}],\n aggregateWindow: {period: AGG_WINDOW_AUTO, fillValues: DEFAULT_FILLVALUES},\n }\n}\n\nconst legendProps = {\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendHide: LEGEND_HIDE_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n}\n\nconst staticLegend = {\n colorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity: LEGEND_OPACITY_DEFAULT,\n orientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show: STATIC_LEGEND_SHOW_DEFAULT,\n widthRatio: STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} as StaticLegend\n\nconst tickProps = {\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n}\n\nexport function defaultLineViewProperties() {\n return {\n ...legendProps,\n staticLegend,\n queries: [defaultViewQuery()],\n colors: DEFAULT_LINE_COLORS as Color[],\n note: '',\n showNoteWhenEmpty: false,\n ...tickProps,\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10' as Base,\n scale: 'linear',\n } as Axis,\n },\n hoverDimension: 'auto' as LineHoverDimension,\n }\n}\n\nexport function defaultBandViewProperties() {\n return {\n ...legendProps,\n staticLegend,\n queries: [defaultViewQuery()],\n colors: DEFAULT_LINE_COLORS as Color[],\n note: '',\n showNoteWhenEmpty: false,\n ...tickProps,\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n scale: 'linear',\n } as Axis,\n },\n hoverDimension: 'auto' as LineHoverDimension,\n upperColumn: '',\n mainColumn: '',\n lowerColumn: '',\n }\n}\n\nfunction defaultGaugeViewProperties() {\n return {\n queries: [defaultViewQuery()],\n colors: DEFAULT_GAUGE_COLORS as Color[],\n prefix: '',\n tickPrefix: '',\n suffix: '',\n tickSuffix: '',\n note: '',\n showNoteWhenEmpty: false,\n decimalPlaces: {\n isEnforced: true,\n digits: 2,\n },\n }\n}\n\nfunction defaultSingleStatViewProperties() {\n return {\n queries: [defaultViewQuery()],\n colors: DEFAULT_THRESHOLDS_LIST_COLORS as Color[],\n prefix: '',\n tickPrefix: '',\n suffix: '',\n tickSuffix: '',\n note: '',\n showNoteWhenEmpty: false,\n decimalPlaces: {\n isEnforced: true,\n digits: 2,\n },\n }\n}\n\n// Defines the zero values of the various view types\nconst NEW_VIEW_CREATORS = {\n xy: (): NewView => ({\n ...defaultView(),\n properties: {\n ...defaultLineViewProperties(),\n type: 'xy',\n shape: 'chronograf-v2',\n geom: 'line',\n xColumn: null,\n yColumn: null,\n position: 'overlaid',\n },\n }),\n band: (): NewView => ({\n ...defaultView(),\n properties: {\n ...defaultBandViewProperties(),\n type: 'band',\n shape: 'chronograf-v2',\n geom: 'line',\n xColumn: null,\n yColumn: null,\n },\n }),\n histogram: (): NewView => ({\n ...defaultView(),\n properties: {\n ...legendProps,\n queries: [],\n type: 'histogram',\n shape: 'chronograf-v2',\n xColumn: '_value',\n xDomain: null,\n xAxisLabel: '',\n fillColumns: null,\n position: 'stacked',\n binCount: 30,\n colors: DEFAULT_LINE_COLORS as Color[],\n note: '',\n showNoteWhenEmpty: false,\n },\n }),\n heatmap: (): NewView => ({\n ...defaultView(),\n properties: {\n ...legendProps,\n queries: [],\n type: 'heatmap',\n shape: 'chronograf-v2',\n xColumn: null,\n yColumn: null,\n xDomain: null,\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n colors: INFERNO,\n binSize: 10,\n note: '',\n showNoteWhenEmpty: false,\n ...tickProps,\n },\n }),\n 'single-stat': (): NewView => ({\n ...defaultView(),\n properties: {\n ...defaultSingleStatViewProperties(),\n type: 'single-stat',\n shape: 'chronograf-v2',\n },\n }),\n gauge: (): NewView => ({\n ...defaultView(),\n properties: {\n ...defaultGaugeViewProperties(),\n type: 'gauge',\n shape: 'chronograf-v2',\n },\n }),\n 'line-plus-single-stat': (): NewView => ({\n ...defaultView(),\n properties: {\n ...defaultLineViewProperties(),\n ...defaultSingleStatViewProperties(),\n type: 'line-plus-single-stat',\n shape: 'chronograf-v2',\n xColumn: null,\n yColumn: null,\n position: 'overlaid',\n },\n }),\n table: (): NewView => ({\n ...defaultView(),\n properties: {\n type: 'table',\n shape: 'chronograf-v2',\n queries: [defaultViewQuery()],\n colors: DEFAULT_THRESHOLDS_TABLE_COLORS as Color[],\n tableOptions: {\n verticalTimeAxis: true,\n sortBy: null,\n fixFirstColumn: false,\n },\n fieldOptions: [],\n decimalPlaces: {\n isEnforced: false,\n digits: 2,\n },\n timeFormat: 'YYYY-MM-DD HH:mm:ss',\n note: '',\n showNoteWhenEmpty: false,\n },\n }),\n 'simple-table': (): NewView => ({\n ...defaultView(),\n properties: {\n type: 'simple-table',\n shape: 'chronograf-v2',\n showAll: false,\n } as SimpleTableViewProperties,\n }),\n markdown: (): NewView => ({\n ...defaultView(),\n properties: {\n type: 'markdown',\n shape: 'chronograf-v2',\n note: '',\n },\n }),\n scatter: (): NewView => ({\n ...defaultView(),\n properties: {\n ...legendProps,\n type: 'scatter',\n shape: 'chronograf-v2',\n queries: [defaultViewQuery()],\n colors: NINETEEN_EIGHTY_FOUR,\n note: '',\n showNoteWhenEmpty: false,\n ...tickProps,\n fillColumns: null,\n symbolColumns: null,\n xColumn: null,\n xDomain: null,\n yColumn: null,\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n },\n }),\n mosaic: (): NewView => ({\n ...defaultView(),\n properties: {\n ...legendProps,\n type: 'mosaic',\n shape: 'chronograf-v2',\n queries: [defaultViewQuery()],\n colors: NINETEEN_EIGHTY_FOUR,\n note: '',\n showNoteWhenEmpty: false,\n generateXAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n fillColumns: null,\n xColumn: null,\n xDomain: null,\n ySeriesColumns: null,\n yLabelColumns: null,\n yLabelColumnSeparator: '',\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n },\n }),\n geo: (): NewView => ({\n ...defaultView(),\n properties: {\n type: 'geo',\n shape: 'chronograf-v2',\n queries: [defaultViewQuery()],\n note: '',\n showNoteWhenEmpty: false,\n center: {\n lat: 0,\n lon: 0,\n },\n zoom: 6,\n allowPanAndZoom: true,\n detectCoordinateFields: false,\n mapStyle: '',\n useS2CellID: true,\n s2Column: 's2_cell_id',\n latLonColumns: {\n lat: {key: '', column: ''},\n lon: {key: '', column: ''},\n },\n layers: [\n {\n type: 'pointMap',\n colorDimension: {label: 'Value'},\n colorField: '_value',\n colors: DEFAULT_THRESHOLDS_GEO_COLORS,\n isClustered: false,\n tooltipColumns: [],\n },\n ],\n },\n }),\n threshold: (): NewView => ({\n ...defaultView('check'),\n properties: {\n type: 'check',\n shape: 'chronograf-v2',\n checkID: '',\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: DEFAULT_CHECK_EVERY,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n colors: DEFAULT_LINE_COLORS as Color[],\n },\n }),\n deadman: (): NewView => ({\n ...defaultView('check'),\n properties: {\n type: 'check',\n shape: 'chronograf-v2',\n checkID: '',\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [],\n },\n },\n ],\n colors: DEFAULT_LINE_COLORS as Color[],\n },\n }),\n custom: (): NewView => ({\n ...defaultView(),\n properties: {\n type: 'table',\n shape: 'chronograf-v2',\n queries: [],\n colors: DEFAULT_THRESHOLDS_LIST_COLORS as Color[],\n tableOptions: {\n verticalTimeAxis: true,\n sortBy: null,\n fixFirstColumn: false,\n },\n fieldOptions: [],\n decimalPlaces: {\n isEnforced: false,\n digits: 2,\n },\n timeFormat: 'YYYY-MM-DD HH:mm:ss',\n note: '',\n showNoteWhenEmpty: false,\n },\n }),\n}\n\ntype CreateViewType = ViewType | CheckType\n\nexport function createView(\n viewType: CreateViewType = 'xy'\n): NewView {\n const creator = NEW_VIEW_CREATORS[viewType]\n\n if (!creator) {\n throw new Error(`no view creator implemented for view of type ${viewType}`)\n }\n\n return creator() as NewView\n}\n","import {get, isEmpty} from 'lodash'\nimport {\n BuilderConfig,\n BuilderTagsType,\n DashboardDraftQuery,\n CheckType,\n Threshold,\n} from 'src/types'\nimport {FUNCTIONS} from 'src/timeMachine/constants/queryBuilder'\nimport {\n TIME_RANGE_START,\n TIME_RANGE_STOP,\n OPTION_NAME,\n WINDOW_PERIOD,\n} from 'src/variables/constants'\nimport {AGG_WINDOW_AUTO} from 'src/timeMachine/constants/queryBuilder'\n\nexport function isConfigValid(builderConfig: BuilderConfig): boolean {\n const {buckets, tags} = builderConfig\n\n const isConfigValid =\n buckets.length >= 1 &&\n tags.length >= 1 &&\n tags.some(({key, values}) => key && values.length > 0)\n\n return isConfigValid\n}\n\nexport const isConfigEmpty = (builderConfig: BuilderConfig): boolean => {\n const {buckets, tags} = builderConfig\n const isConfigEmpty =\n buckets.length <= 1 &&\n !tags.some(({key, values}) => key && values.length > 0)\n\n return isConfigEmpty\n}\n\nexport interface CheckQueryValidity {\n oneQuery: boolean\n builderMode: boolean\n singleAggregateFunc: boolean\n singleField: boolean\n}\n\nexport const isDraftQueryAlertable = (\n draftQueries: DashboardDraftQuery[]\n): CheckQueryValidity => {\n const tags: BuilderTagsType[] = get(\n draftQueries,\n '[0].builderConfig.tags',\n []\n )\n const fieldSelection = tags.find(t => get(t, 'key') === '_field')\n const fieldValues = get(fieldSelection, 'values', [])\n const functions = draftQueries[0].builderConfig.functions\n return {\n oneQuery: draftQueries.length === 1, // one query\n builderMode: draftQueries[0].editMode == 'builder', // built in builder\n singleAggregateFunc: functions.length === 1, // one aggregate function\n singleField: fieldValues.length === 1, // one field selection\n }\n}\n\nexport const isCheckSaveable = (\n draftQueries: DashboardDraftQuery[],\n checkType: CheckType,\n thresholds: Threshold[]\n): boolean => {\n const {oneQuery, builderMode, singleAggregateFunc, singleField} =\n isDraftQueryAlertable(draftQueries)\n\n if (checkType === 'custom') {\n return true\n }\n\n if (checkType === 'deadman') {\n return oneQuery && builderMode && singleField\n }\n\n return (\n oneQuery &&\n builderMode &&\n singleAggregateFunc &&\n singleField &&\n !!thresholds.length\n )\n}\n\nexport function buildQuery(builderConfig: BuilderConfig): string {\n const {functions} = builderConfig\n\n let query: string\n if (functions.length) {\n query = functions\n .map(f => buildQueryFromConfig(builderConfig, f))\n .join('\\n\\n')\n } else {\n query = buildQueryFromConfig(builderConfig, null)\n }\n\n return query\n}\n\nfunction buildQueryFromConfig(\n builderConfig: BuilderConfig,\n fn?: BuilderConfig['functions'][0]\n): string {\n const [bucket] = builderConfig.buckets\n\n const tags = Array.from(builderConfig.tags)\n\n // todo: (bucky) - check to see if we can combine filter calls\n // https://github.com/influxdata/influxdb/issues/16076\n let tagsFunctionCalls = ''\n tags.forEach(tag => {\n tagsFunctionCalls += convertTagsToFluxFunctionString(tag)\n })\n\n const {aggregateWindow} = builderConfig\n const fnCall = fn\n ? formatFunctionCall(fn, aggregateWindow.period, aggregateWindow.fillValues)\n : ''\n\n const query = `from(bucket: \"${bucket}\")\n |> range(start: ${OPTION_NAME}.${TIME_RANGE_START}, stop: ${OPTION_NAME}.${TIME_RANGE_STOP})${tagsFunctionCalls}${fnCall}`\n\n return query\n}\n\nexport function formatFunctionCall(\n fn: BuilderConfig['functions'][0],\n period: string,\n fillValues: boolean\n) {\n const fnSpec = FUNCTIONS.find(spec => spec.name === fn.name)\n\n if (!fnSpec) {\n return\n }\n\n const formattedPeriod = formatPeriod(period)\n\n return `\\n ${fnSpec.flux(formattedPeriod, fillValues)}\\n |> yield(name: \"${\n fn.name\n }\")`\n}\n\nconst convertTagsToFluxFunctionString =\n function convertTagsToFluxFunctionString(tag: BuilderTagsType) {\n if (!tag.key) {\n return ''\n }\n\n if (tag.aggregateFunctionType === 'filter') {\n if (!tag.values.length) {\n return ''\n }\n\n return `\\n |> filter(fn: (r) => ${tagToFlux(tag)})`\n }\n\n if (tag.aggregateFunctionType === 'group') {\n // if group is selected, but there are no values, don't return anything.\n // same behavior as when 'filter' is selected but no values are chosen\n if (!tag.values.length) {\n return ''\n }\n\n const quotedValues = tag.values.map(value => `\"${value}\"`) // wrap the value in double quotes\n\n if (quotedValues.length) {\n return `\\n |> group(columns: [${quotedValues.join(', ')}])` // join with a comma (e.g. \"foo\",\"bar\",\"baz\")\n }\n\n return '\\n |> group()'\n }\n\n return ''\n }\n\nexport const tagToFlux = function tagToFlux(tag: BuilderTagsType) {\n return tag.values\n .map(value => `r[\"${tag.key}\"] == \"${value.replace(/\\\\/g, '\\\\\\\\')}\"`)\n .join(' or ')\n}\n\nconst formatPeriod = (period: string): string => {\n if (period === AGG_WINDOW_AUTO || !period) {\n return `${OPTION_NAME}.${WINDOW_PERIOD}`\n }\n\n return period\n}\n\nexport enum ConfirmationState {\n NotRequired = 'no confirmation required',\n Required = 'confirmation required',\n Unknown = 'unknown confirmation state',\n}\n\nexport const confirmationState = (\n query: string,\n builderConfig: BuilderConfig\n) => {\n if (\n !isConfigValid(builderConfig) ||\n !hasQueryBeenEdited(query, builderConfig)\n ) {\n ConfirmationState.NotRequired\n }\n\n if (hasQueryBeenEdited(query, builderConfig) || isEmpty(query)) {\n return ConfirmationState.Required\n }\n\n return ConfirmationState.NotRequired\n}\n\nexport function hasQueryBeenEdited(\n query: string,\n builderConfig: BuilderConfig\n): boolean {\n const _isQueryDifferent = query !== buildQuery(builderConfig)\n\n return _isQueryDifferent\n}\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Subscriptions {\n subscriptions?: Subscription[]\n}\n\nexport interface Subscription {\n id?: string\n name?: string\n description?: string\n protocol?: string\n orgID?: string\n processGroupId?: string\n brokerHost?: string\n brokerPort?: number\n brokerUsername?: string\n topic?: string\n certProvidedAt?: string\n authType?: 'none' | 'user' | 'certificate'\n dataFormat?: string\n jsonMeasurementKey?: {\n path?: string\n name?: string\n type?: string\n }\n jsonFieldKeys?: JsonSpec[]\n jsonTagKeys?: JsonSpec[]\n jsonTimestamp?: {\n path?: string\n name?: string\n type?: string\n }\n stringMeasurement?: {\n pattern?: string\n }\n stringFields?: StringObjectParams[]\n stringTags?: StringObjectParams[]\n stringTimestamp?: {\n pattern?: string\n }\n status?: string\n bucket?: string\n isActive?: boolean\n createdAt?: string\n updatedAt?: string\n tokenID?: string\n token?: string\n timestampPrecision?: string\n}\n\nexport interface JsonSpec {\n path?: string\n name?: string\n type?: string\n}\n\nexport interface StringObjectParams {\n pattern?: string\n name?: string\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport interface SubscriptionParams {\n protocol?: string\n name?: string\n description?: string\n orgID?: string\n brokerHost?: string\n brokerPort?: number\n brokerUsername?: string\n brokerPassword?: string\n brokerCACert?: string\n brokerClientCert?: string\n brokerClientKey?: string\n authType?: 'none' | 'user' | 'certificate'\n topic?: string\n dataFormat?: string\n jsonMeasurementKey?: {\n path?: string\n name?: string\n type?: string\n }\n jsonFieldKeys?: JsonSpec[]\n jsonTagKeys?: JsonSpec[]\n jsonTimestamp?: {\n path?: string\n name?: string\n type?: string\n }\n stringMeasurement?: {\n pattern?: string\n }\n stringFields?: StringObjectParams[]\n stringTags?: StringObjectParams[]\n stringTimestamp?: {\n pattern?: string\n }\n bucket?: string\n isActive?: boolean\n timestampPrecision?: string\n}\n\nexport interface SubscriptionRunStatus {\n isActive?: boolean\n}\n\nexport interface SubscriptionStatus {\n isActive?: boolean\n processors?: any\n processGroupID?: string\n id: string\n}\n\nexport interface SubscriptionStatusArray {\n subscriptions?: SubscriptionStatus[]\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetBrokerSubsParams {}\n\ntype GetBrokerSubsResult =\n | GetBrokerSubsOKResult\n | GetBrokerSubsUnauthorizedResult\n | GetBrokerSubsInternalServerErrorResult\n\ninterface GetBrokerSubsOKResult {\n status: 200\n headers: Headers\n data: Subscriptions\n}\n\ninterface GetBrokerSubsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBrokerSubs = (\n params: GetBrokerSubsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/broker/subs',\n params,\n options\n ) as Promise\n\nexport interface PostBrokerSubParams {\n data: SubscriptionParams\n}\n\ntype PostBrokerSubResult =\n | PostBrokerSubCreatedResult\n | PostBrokerSubBadRequestResult\n | PostBrokerSubUnauthorizedResult\n | PostBrokerSubInternalServerErrorResult\n\ninterface PostBrokerSubCreatedResult {\n status: 201\n headers: Headers\n data: Subscription\n}\n\ninterface PostBrokerSubBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostBrokerSubUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostBrokerSubInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postBrokerSub = (\n params: PostBrokerSubParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/broker/subs',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetBrokerSubParams {\n id: string\n}\n\ntype GetBrokerSubResult =\n | GetBrokerSubOKResult\n | GetBrokerSubBadRequestResult\n | GetBrokerSubUnauthorizedResult\n | GetBrokerSubInternalServerErrorResult\n\ninterface GetBrokerSubOKResult {\n status: 200\n headers: Headers\n data: Subscription\n}\n\ninterface GetBrokerSubBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBrokerSub = (\n params: GetBrokerSubParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/broker/subs/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface PutBrokerSubParams {\n id: string\n\n data: SubscriptionParams\n}\n\ntype PutBrokerSubResult =\n | PutBrokerSubOKResult\n | PutBrokerSubBadRequestResult\n | PutBrokerSubUnauthorizedResult\n | PutBrokerSubInternalServerErrorResult\n\ninterface PutBrokerSubOKResult {\n status: 200\n headers: Headers\n data: Subscription\n}\n\ninterface PutBrokerSubBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutBrokerSubUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutBrokerSubInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putBrokerSub = (\n params: PutBrokerSubParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/broker/subs/${params.id}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteBrokerSubParams {\n id: string\n}\n\ntype DeleteBrokerSubResult =\n | DeleteBrokerSubNoContentResult\n | DeleteBrokerSubBadRequestResult\n | DeleteBrokerSubUnauthorizedResult\n | DeleteBrokerSubNotFoundResult\n | DeleteBrokerSubInternalServerErrorResult\n\ninterface DeleteBrokerSubNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteBrokerSubBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteBrokerSubUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteBrokerSubNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteBrokerSubInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteBrokerSub = (\n params: DeleteBrokerSubParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2private/broker/subs/${params.id}`,\n params,\n options\n ) as Promise\n\nexport interface GetBrokerSubsStatusParams {\n id: string\n}\n\ntype GetBrokerSubsStatusResult =\n | GetBrokerSubsStatusOKResult\n | GetBrokerSubsStatusBadRequestResult\n | GetBrokerSubsStatusUnauthorizedResult\n | GetBrokerSubsStatusInternalServerErrorResult\n\ninterface GetBrokerSubsStatusOKResult {\n status: 200\n headers: Headers\n data: Subscription\n}\n\ninterface GetBrokerSubsStatusBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubsStatusUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubsStatusInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBrokerSubsStatus = (\n params: GetBrokerSubsStatusParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/broker/subs/${params.id}/status`,\n params,\n options\n ) as Promise\n\nexport interface PutBrokerSubsStatusParams {\n id: string\n\n data: SubscriptionRunStatus\n}\n\ntype PutBrokerSubsStatusResult =\n | PutBrokerSubsStatusOKResult\n | PutBrokerSubsStatusBadRequestResult\n | PutBrokerSubsStatusUnauthorizedResult\n | PutBrokerSubsStatusInternalServerErrorResult\n\ninterface PutBrokerSubsStatusOKResult {\n status: 200\n headers: Headers\n data: SubscriptionStatus\n}\n\ninterface PutBrokerSubsStatusBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutBrokerSubsStatusUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutBrokerSubsStatusInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putBrokerSubsStatus = (\n params: PutBrokerSubsStatusParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/broker/subs/${params.id}/status`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetBrokerSubsStatusesParams {}\n\ntype GetBrokerSubsStatusesResult =\n | GetBrokerSubsStatusesOKResult\n | GetBrokerSubsStatusesUnauthorizedResult\n | GetBrokerSubsStatusesInternalServerErrorResult\n\ninterface GetBrokerSubsStatusesOKResult {\n status: 200\n headers: Headers\n data: SubscriptionStatusArray\n}\n\ninterface GetBrokerSubsStatusesUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBrokerSubsStatusesInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBrokerSubsStatuses = (\n params: GetBrokerSubsStatusesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/broker/subs/statuses',\n params,\n options\n ) as Promise\n","// TODO: temporary fix until we implement pagination https://github.com/influxdata/influxdb/pull/17336\n// Different resources *might* have different limits\nexport const LIMIT = 100\nexport const BUCKET_LIMIT = 100\nexport const RULE_LIMIT = 100\nexport const DASHBOARD_LIMIT = 100\nexport const TASK_LIMIT = 500\n","// Libraries\nimport {get} from 'lodash'\nimport {createSelector} from 'reselect'\n\n// Types\nimport {\n AppState,\n Bucket,\n Label,\n RemoteDataState,\n ResourceType,\n Secret,\n Task,\n Telegraf,\n} from 'src/types'\nimport {PermissionTypes} from 'src/authorizations/utils/permissions'\n\nexport const getStatus = (\n {resources}: AppState,\n resource: ResourceType\n): RemoteDataState => {\n return resources[resource].status\n}\n\nexport const getAll = (\n {resources}: AppState,\n resource: ResourceType\n): R[] => {\n const allIDs: string[] = resources[resource].allIDs\n const byID: {[uuid: string]: R} = resources[resource].byID\n return (allIDs ?? []).map(id => byID[id])\n}\n\nexport const getAllBuckets = (state: AppState): Bucket[] =>\n getAll(state, ResourceType.Buckets)\n\nexport const getAllTasks = (state: AppState): Task[] =>\n getAll(state, ResourceType.Tasks) || []\n\nexport const getAllTelegrafs = (state: AppState): Telegraf[] =>\n getAll(state, ResourceType.Telegrafs)\n\nexport const hasNoTasks = (state: AppState): boolean =>\n getAll(state, ResourceType.Tasks).length === 0\n\nexport const getAllSecrets = (state: AppState): Secret[] =>\n getAll(state, ResourceType.Secrets) || []\n\nexport const getToken = (state: AppState): string =>\n get(state, 'dataLoading.dataLoaders.token', '') || ''\n\nexport const getByID = (\n {resources}: AppState,\n type: ResourceType,\n id: string\n): R => {\n const byID = get(resources, `${type}.byID`)\n\n if (!byID) {\n throw new Error(`\"${type}\" resource has yet not been set`)\n }\n\n const resource = get(byID, `${id}`, null)\n\n return resource\n}\n\nexport const getLabels = (state: AppState, labelIDs: string[]): Label[] => {\n return labelIDs\n .map(labelID => getByID
\n )\n }\n\n private get input(): JSX.Element {\n const {placeholder} = this.props\n const {workingDescription} = this.state\n\n return (\n \n )\n }\n\n private handleStartEditing = (): void => {\n this.setState({isEditing: true})\n }\n\n private handleStopEditing = () => {\n const {workingDescription} = this.state\n const {onUpdate} = this.props\n\n onUpdate(workingDescription)\n this.setState({isEditing: false})\n }\n\n private handleInputChange = (e: ChangeEvent): void => {\n this.setState({workingDescription: e.target.value})\n }\n\n private handleKeyDown = (e: KeyboardEvent) => {\n const {onUpdate, description} = this.props\n const {workingDescription} = this.state\n\n if (e.key === 'Enter') {\n onUpdate(workingDescription)\n this.setState({isEditing: false})\n }\n\n if (e.key === 'Escape') {\n this.setState({isEditing: false, workingDescription: description})\n }\n }\n\n private handleInputFocus = (e: ChangeEvent): void => {\n e.currentTarget.select()\n }\n\n private get previewClassName(): string {\n const {description} = this.props\n\n return classnames('editable-description--preview', {\n untitled: !description,\n })\n }\n}\n\nexport default EditableDescription\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport {nanoid} from 'nanoid'\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\n// Components\nimport {\n IndexList,\n ComponentSize,\n Alignment,\n ConfirmationButton,\n ComponentColor,\n Appearance,\n} from '@influxdata/clockface'\nimport EditableDescription from 'src/shared/components/editable_description/EditableDescription'\n\ninterface Item {\n text?: string\n name?: string\n}\n\ninterface RowProps {\n confirmText?: string\n item: Item\n onDelete: (item: Item) => void\n fieldName: string\n index: number\n onChange: (index: number, value: string) => void\n}\n\n@ErrorHandling\nclass Row extends PureComponent {\n public static defaultProps: Partial = {\n confirmText: 'Delete',\n }\n\n public render() {\n const {item, fieldName} = this.props\n return (\n \n } columnCount={2}>\n \n \n \n \n \n \n \n \n \n \n )\n }\n\n private handleClickDelete = (item: Item) => {\n this.props.onDelete(item)\n }\n\n private handleKeyDown = (value: string) => {\n const {onChange, index} = this.props\n\n onChange(index, value)\n }\n}\n\nexport default Row\n","// Libraries\nimport React, {SFC} from 'react'\nimport {nanoid} from 'nanoid'\n\n// Components\nimport Row from 'src/clockface/components/inputs/multipleInput/Row'\n\ninterface Item {\n text?: string\n name?: string\n}\n\ninterface RowsProps {\n tags: Item[]\n confirmText?: string\n onDeleteTag?: (item: Item) => void\n onChange?: (index: number, value: string) => void\n}\n\nconst Rows: SFC = ({tags, onDeleteTag, onChange}) => {\n return (\n
\n {tags.map(item => {\n return (\n \n )\n })}\n
\n )\n}\n\nexport default Rows\n","// Libraries\nimport React, {PureComponent, ChangeEvent} from 'react'\nimport {debounce, isEmpty} from 'lodash'\n\n// Components\nimport {Button, Form, Input, Grid} from '@influxdata/clockface'\nimport Rows from 'src/clockface/components/inputs/multipleInput/MultipleRows'\n\n// Utils\nimport {validateURI} from 'src/shared/utils/validateURI'\n\n// Types\nimport {\n AutoComplete,\n Columns,\n ComponentColor,\n ComponentSize,\n ComponentStatus,\n InputType,\n} from '@influxdata/clockface'\n\n// Decorators\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\nconst VALIDATE_DEBOUNCE_MS = 350\n\nexport interface Item {\n text?: string\n name?: string\n}\n\nexport enum MultiInputType {\n String = 'string',\n URI = 'uri',\n}\n\ninterface Props {\n onAddRow: (item: string) => void\n onDeleteRow: (item: string) => void\n onEditRow: (index: number, item: string) => void\n tags: Item[]\n title: string\n helpText: string\n inputID?: string\n inputType?: MultiInputType\n autoFocus?: boolean\n}\n\ninterface State {\n editingText: string\n status: ComponentStatus\n}\n\n@ErrorHandling\nclass MultipleInput extends PureComponent {\n private debouncedValidate: (value: string) => void\n private inputRef\n\n constructor(props: Props) {\n super(props)\n this.state = {editingText: '', status: ComponentStatus.Default}\n\n this.inputRef = React.createRef()\n\n this.debouncedValidate = debounce(\n this.handleValidateURI,\n VALIDATE_DEBOUNCE_MS\n )\n }\n\n public render() {\n const {title, helpText, tags, autoFocus, onEditRow} = this.props\n const {editingText} = this.state\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n private handleInputChange = (e: ChangeEvent) => {\n const {inputType} = this.props\n const {value} = e.target\n\n this.setState({editingText: value})\n if (inputType === MultiInputType.URI) {\n this.debouncedValidate(value)\n }\n }\n\n private handleSubmit = e => {\n e.preventDefault()\n const newItem = this.inputRef.current.value.trim()\n const {tags, onAddRow} = this.props\n if (!this.shouldAddToList(newItem, tags)) {\n return\n }\n this.setState({editingText: ''})\n onAddRow(this.inputRef.current.value)\n }\n\n private handleKeyDown = e => {\n if (e.key === 'Enter') {\n e.preventDefault()\n const newItem = e.target.value.trim()\n const {tags, onAddRow} = this.props\n if (!this.shouldAddToList(newItem, tags)) {\n return\n }\n this.setState({editingText: ''})\n onAddRow(e.target.value)\n }\n }\n\n private handleDeleteRow = (item: Item) => {\n this.props.onDeleteRow(item.name || item.text)\n }\n\n private shouldAddToList(item: Item, tags: Item[]): boolean {\n return !isEmpty(item) && !tags.find(l => l === item)\n }\n\n private handleValidateURI = (value: string): void => {\n if (validateURI(value)) {\n this.setState({status: ComponentStatus.Valid})\n } else {\n this.setState({status: ComponentStatus.Error})\n }\n }\n}\n\nexport default MultipleInput\n","// Libraries\nimport React, {SFC} from 'react'\n\ninterface Props {\n children: any\n}\n\nconst WizardFullScreen: SFC = (props: Props) => {\n return (\n <>\n
\n {props.children}\n
\n Powered by {' '}\n \n InfluxData\n \n
\n
\n
\n \n )\n}\n\nexport default WizardFullScreen\n","// Libraries\nimport React, {PureComponent} from 'react'\n\n// Components\nimport {Overlay} from '@influxdata/clockface'\n\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\ninterface Props {\n children: string | React.ReactNode\n footer?: string | React.ReactNode\n title: string\n maxWidth: number\n onDismiss: () => void\n}\n\n@ErrorHandling\nclass WizardOverlay extends PureComponent {\n public static defaultProps = {\n maxWidth: 1200,\n }\n\n public render() {\n const {title, maxWidth, children, footer, onDismiss} = this.props\n\n return (\n \n \n \n \n
{children}
\n
\n {footer && {footer}}\n
\n
\n )\n }\n}\n\nexport default WizardOverlay\n","// Libraries\nimport React, {SFC} from 'react'\n\ninterface Props {\n children: any\n}\n\nconst WizardProgressHeader: SFC = (props: Props) => {\n const {children} = props\n return
{children}
\n}\n\nexport default WizardProgressHeader\n","// Libraries\nimport React, {PureComponent} from 'react'\n\n// Components\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\n// constants\nimport {StepStatus, ConnectorState} from 'src/clockface/constants/wizard'\n\ninterface Props {\n currentStepIndex: number\n handleSetCurrentStep: (stepNumber: number) => void\n stepStatuses: StepStatus[]\n stepTitles: string[]\n stepTestIds: string[]\n stepSkippable: boolean[]\n hideFirstStep?: boolean\n}\n\n@ErrorHandling\nclass ProgressBar extends PureComponent {\n public render() {\n return
{this.WizardProgress}
\n }\n\n private handleSetCurrentStep = (i: number) => () => {\n const {handleSetCurrentStep, currentStepIndex} = this.props\n\n const isAfterCurrentUnskippableStep =\n !this.isStepSkippable && i > currentStepIndex\n const isAfterNextUnskippableStep =\n this.nextNonSkippableStep !== -1 && i > this.nextNonSkippableStep\n\n const preventSkip =\n isAfterCurrentUnskippableStep || isAfterNextUnskippableStep\n\n if (preventSkip) {\n return\n }\n\n handleSetCurrentStep(i)\n }\n\n private get nextNonSkippableStep(): number {\n const {currentStepIndex, stepSkippable, stepStatuses} = this.props\n return stepSkippable.findIndex((isSkippable, i) => {\n return (\n !isSkippable &&\n i > currentStepIndex &&\n stepStatuses[i] !== StepStatus.Complete\n )\n })\n }\n\n private get isStepSkippable(): boolean {\n const {stepSkippable, stepStatuses, currentStepIndex} = this.props\n\n return (\n stepSkippable[currentStepIndex] ||\n stepStatuses[currentStepIndex] === StepStatus.Complete\n )\n }\n\n private getStepClass(i: number): string {\n if (!this.isStepSkippable && i > this.props.currentStepIndex) {\n return 'wizard--progress-button unclickable'\n }\n return 'wizard--progress-button'\n }\n\n private get WizardProgress(): JSX.Element[] {\n const {\n hideFirstStep,\n stepStatuses,\n stepTitles,\n stepTestIds,\n currentStepIndex,\n } = this.props\n\n const lastIndex = stepStatuses.length - 1\n\n const progressBar: JSX.Element[] = stepStatuses.reduce(\n (acc, stepStatus, i) => {\n if (hideFirstStep && i === 0) {\n return [...acc]\n }\n\n let currentStep = ''\n\n // STEP STATUS\n if (i === currentStepIndex && stepStatus !== StepStatus.Error) {\n currentStep = 'current'\n }\n\n const stepEle = (\n \n \n \n \n \n {stepTitles[i]}\n
\n \n )\n\n if (i === lastIndex) {\n return [...acc, stepEle]\n }\n\n // PROGRESS BAR CONNECTOR\n let connectorStatus = ConnectorState.None\n\n if (i === currentStepIndex && stepStatus !== StepStatus.Error) {\n connectorStatus = ConnectorState.Some\n }\n if (i === lastIndex || stepStatus === StepStatus.Complete) {\n connectorStatus = ConnectorState.Full\n }\n const connectorEle = (\n \n )\n return [...acc, stepEle, connectorEle]\n },\n []\n )\n return progressBar\n }\n}\n\nexport default ProgressBar\n","// Libraries\nimport React, {Component} from 'react'\nimport classnames from 'classnames'\n\ninterface Props {\n label: string\n action: (value?: any) => void\n description: string\n testID: string\n value?: any\n disabled?: boolean\n onCollapseMenu?: () => void\n}\n\nclass ContextMenuItem extends Component {\n public static defaultProps = {\n description: '',\n testID: 'context-menu-item',\n }\n\n public render() {\n const {label, disabled, testID} = this.props\n\n return (\n \n {label}\n {this.description}\n \n )\n }\n\n private get className(): string {\n const {disabled} = this.props\n\n return classnames('context-menu--item', {\n 'context-menu--item__disabled': disabled,\n })\n }\n\n private get description(): JSX.Element {\n const {description} = this.props\n if (description) {\n return
{description}
\n }\n }\n\n private handleClick = (): void => {\n const {action, onCollapseMenu, value} = this.props\n\n action(value)\n\n if (onCollapseMenu) {\n onCollapseMenu()\n }\n }\n}\n\nexport default ContextMenuItem\n","// Libraries\nimport React, {Component} from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport ContextMenuItem from 'src/clockface/components/context_menu/ContextMenuItem'\nimport {ClickOutside} from 'src/shared/components/ClickOutside'\nimport {Button} from '@influxdata/clockface'\n\n// Types\nimport {\n ComponentColor,\n IconFont,\n ComponentSize,\n ButtonShape,\n} from '@influxdata/clockface'\n\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\ninterface Props {\n children: JSX.Element | JSX.Element[]\n icon: IconFont\n onBoostZIndex?: (boostZIndex: boolean) => void\n text: string\n color: ComponentColor\n shape: ButtonShape\n testID: string\n size?: ComponentSize\n style?: React.CSSProperties\n}\n\ninterface State {\n isExpanded: boolean\n}\n\n@ErrorHandling\nclass ContextMenu extends Component {\n public static defaultProps = {\n color: ComponentColor.Primary,\n shape: ButtonShape.Square,\n text: '',\n testID: 'context-menu',\n size: ComponentSize.ExtraSmall,\n }\n\n constructor(props: Props) {\n super(props)\n\n this.state = {\n isExpanded: false,\n }\n }\n\n public render() {\n const {icon, text, shape, color, testID, size, style} = this.props\n\n return (\n \n
\n \n {this.menu}\n
\n
\n )\n }\n\n private handleExpandMenu = (): void => {\n const {onBoostZIndex} = this.props\n\n if (onBoostZIndex) {\n onBoostZIndex(true)\n }\n\n this.setState({isExpanded: true})\n }\n\n private handleCollapseMenu = (): void => {\n const {onBoostZIndex} = this.props\n\n if (onBoostZIndex) {\n onBoostZIndex(false)\n }\n\n this.setState({isExpanded: false})\n }\n\n private get menu(): JSX.Element {\n const {children} = this.props\n\n return (\n
\n
\n {React.Children.map(children, (child: JSX.Element) => {\n if (child.type === ContextMenuItem) {\n return (\n \n )\n } else {\n return child\n }\n })}\n
\n
\n )\n }\n\n private get listClassName(): string {\n const {color} = this.props\n\n return classnames('context-menu--list', {\n [`context-menu--${color}`]: color,\n })\n }\n\n private get menuClassName(): string {\n const {isExpanded} = this.state\n\n return classnames('context-menu--list-container', {open: isExpanded})\n }\n\n private get toggleClassName(): string {\n const {color} = this.props\n const {isExpanded} = this.state\n\n return classnames('context-menu--toggle', {\n [`context-menu--${color}`]: color,\n active: isExpanded,\n })\n }\n}\n\nexport default ContextMenu\n","export enum ComponentColor {\n Default = 'default',\n Primary = 'primary',\n Secondary = 'secondary',\n Success = 'success',\n Warning = 'warning',\n Danger = 'danger',\n Alert = 'alert',\n}\n\nexport enum ComponentSize {\n ExtraSmall = 'xs',\n Small = 'sm',\n Medium = 'md',\n Large = 'lg',\n}\n\nexport enum ComponentStatus {\n Default = 'default',\n Loading = 'loading',\n Error = 'error',\n Valid = 'valid',\n Disabled = 'disabled',\n}\n\nexport enum DropdownMenuColors {\n Amethyst = 'amethyst',\n Malachite = 'malachite',\n Sapphire = 'sapphire',\n Onyx = 'onyx',\n}\n\nexport enum DropdownMenuPosition {\n Above = 'above',\n Below = 'below',\n}\n\nexport type DropdownChild =\n | Array\n | string\n | JSX.Element\n | Element\n\nexport enum ButtonShape {\n Default = 'none',\n Square = 'square',\n StretchToFit = 'stretch',\n}\n\nexport enum ButtonType {\n Button = 'button',\n Submit = 'submit',\n}\n\nexport enum Greys {\n Obsidian = '#0f0e15',\n Raven = '#181820',\n Kevlar = '#202028',\n Castle = '#292933',\n Onyx = '#31313d',\n Pepper = '#383846',\n Smoke = '#434453',\n Graphite = '#545667',\n Storm = '#676978',\n Mountain = '#757888',\n Wolf = '#8e91a1',\n Sidewalk = '#999dab',\n Forge = '#a4a8b6',\n Mist = '#bec2cc',\n Chromium = '#c6cad3',\n Platinum = '#d4d7dd',\n Pearl = '#e7e8eb',\n Whisper = '#eeeff2',\n Cloud = '#f6f6f8',\n Ghost = '#fafafc',\n White = '#ffffff',\n}\n\nexport enum IconFont {\n AddCell = 'add-cell',\n AlertTriangle = 'alert-triangle',\n Alerts = 'alerts',\n Annotate = 'annotate',\n AnnotatePlus = 'annotate-plus',\n AuthZero = 'authzero',\n BarChart = 'bar-chart',\n Bell = 'bell',\n BellRinging = 'bell-ringing',\n BellSolid = 'bell-solid',\n Calendar = 'calendar',\n Capacitor = 'capacitor2',\n CaretDown = 'caret-down',\n CaretLeft = 'caret-left',\n CaretRight = 'caret-right',\n CaretUp = 'caret-up',\n Chat = 'chat',\n Checkmark = 'checkmark',\n Circle = 'circle',\n CircleThick = 'circle-thick',\n Clock = 'clock',\n CogOutline = 'cog-outline',\n CogSolid_New = 'cog-thick',\n Collapse = 'collapse',\n CrownOutline = 'crown-outline',\n CrownSolid = 'crown2',\n Cube = 'cube',\n Cubouniform = 'cubo-uniform',\n CuboNav = 'cubo-nav',\n Dashboards = 'dashboards',\n DashF = 'dash-f',\n DashH = 'dash-h',\n DashJ = 'dash-j',\n Disks = 'disks',\n Download = 'download',\n Duplicate = 'duplicate',\n ExpandA = 'expand-a',\n ExpandB = 'expand-b',\n Export = 'export',\n Eye = 'eye',\n EyeClosed = 'eye-closed',\n EyeOpen = 'eye-open',\n GitHub = 'github',\n Google = 'google',\n GraphLine = 'graphline-2',\n Group = 'group',\n Heroku = 'heroku',\n HerokuSimple = '',\n Import = 'import',\n Link = 'link',\n OAuth = 'oauth',\n Octagon = 'octagon',\n Okta = 'okta',\n Pause = 'pause',\n Pencil = 'pencil',\n Play = 'play',\n Plus = 'plus',\n PlusSkinny = 'plus-skinny',\n Pulse = 'pulse-c',\n Refresh = 'refresh',\n Remove = 'remove',\n Search = 'search',\n Server = 'server2',\n Shuffle = 'shuffle',\n Square = 'square',\n TextBlock = 'text-block',\n Trash = 'trash',\n Triangle = 'triangle',\n User = 'user',\n UserAdd = 'user-add',\n UserOutline = 'user-outline',\n UserRemove = 'user-remove',\n UsersDuo = 'users-duo',\n UsersTrio = 'users-trio',\n Wood = 'wood',\n Wrench = 'wrench',\n Star = 'star',\n Stop = 'stop',\n Zap = 'zap',\n}\n\nexport enum Columns {\n One = 1,\n Two = 2,\n Three = 3,\n Four = 4,\n Five = 5,\n Six = 6,\n Seven = 7,\n Eight = 8,\n Nine = 9,\n Ten = 10,\n Eleven = 11,\n Twelve = 12,\n}\n\nexport enum Alignment {\n Left = 'left',\n Center = 'center',\n Right = 'right',\n}\n\nexport enum Sort {\n Descending = 'desc',\n Ascending = 'asc',\n None = 'none',\n}\n\nexport enum Stack {\n Rows = 'rows',\n Columns = 'columns',\n}\n\nexport enum NavMenuType {\n RouterLink = 'router',\n HTTPLink = 'http',\n ShowDropdown = 'showDropdown',\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport ContextMenu from 'src/clockface/components/context_menu/ContextMenu'\nimport ContextMenuItem from 'src/clockface/components/context_menu/ContextMenuItem'\n\n// Types\nimport {Alignment} from 'src/clockface/types'\n\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\ninterface Props {\n children: JSX.Element | JSX.Element[]\n align: Alignment\n className?: string\n}\n\ninterface State {\n boostZIndex: boolean\n}\n\n@ErrorHandling\nclass Context extends PureComponent {\n public static defaultProps = {\n align: Alignment.Right,\n }\n\n public static Menu = ContextMenu\n public static Item = ContextMenuItem\n\n constructor(props: Props) {\n super(props)\n\n this.state = {\n boostZIndex: false,\n }\n }\n\n public render() {\n const {children} = this.props\n\n return (\n
\n {React.Children.map(children, (child: JSX.Element) => {\n if (child?.type === ContextMenu) {\n return (\n \n )\n } else {\n return child\n }\n })}\n
\n )\n }\n\n private handleBoostZIndex = (boostZIndex: boolean): void => {\n this.setState({boostZIndex})\n }\n\n private get className(): string {\n const {align, className} = this.props\n const {boostZIndex} = this.state\n\n return classnames('context-menu', {\n [`${className}`]: className,\n 'context-menu--boost-z': boostZIndex,\n 'context-menu--align-left': align === Alignment.Left,\n 'context-menu--align-right': align === Alignment.Right,\n })\n }\n}\n\nexport default Context\n","import React, {FC, useCallback, useEffect, useState} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {createLocalStorageStateHook} from 'use-local-storage-state'\nimport {nanoid} from 'nanoid'\nimport {\n FlowList,\n Flow,\n FlowState,\n Resource,\n PipeData,\n PipeMeta,\n} from 'src/types/flows'\nimport {getOrg} from 'src/organizations/selectors'\nimport {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\nimport {AUTOREFRESH_DEFAULT} from 'src/shared/constants'\nimport {DEFAULT_PROJECT_NAME, PROJECT_NAME} from 'src/flows'\nimport {TEMPLATES} from 'src/flows/templates'\nimport {\n createAPI,\n deleteAPI,\n getAllAPI,\n migrateLocalFlowsToAPI,\n} from 'src/flows/context/api'\nimport {\n getNotebook,\n postNotebook,\n patchNotebook,\n} from 'src/client/notebooksRoutes'\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n notebookCreateFail,\n notebookDeleteFail,\n notebookDeleteSuccess,\n} from 'src/shared/copy/notifications'\nimport {setCloneName} from 'src/utils/naming'\nimport {CLOUD} from 'src/shared/constants'\n\nexport interface FlowListContextType extends FlowList {\n add: (flow?: Flow) => Promise\n clone: (id: string) => Promise\n update: (id: string, flow?: Flow) => void\n remove: (id: string) => void\n getAll: () => void\n}\n\nexport const EMPTY_NOTEBOOK: FlowState = {\n name: DEFAULT_PROJECT_NAME,\n range: DEFAULT_TIME_RANGE,\n refresh: AUTOREFRESH_DEFAULT,\n data: {\n byID: {},\n allIDs: [],\n } as Resource,\n meta: {\n byID: {},\n allIDs: [],\n } as Resource,\n readOnly: false,\n}\n\nexport const DEFAULT_CONTEXT: FlowListContextType = {\n flows: {},\n add: (_flow?: Flow) => {},\n clone: (_id: string) => {},\n update: (_id: string, _flow: Partial) => {},\n remove: (_id: string) => {},\n getAll: () => {},\n} as FlowListContextType\n\nconst useLocalStorageState = createLocalStorageStateHook(\n 'flows',\n DEFAULT_CONTEXT.flows\n)\n\nexport const FlowListContext =\n React.createContext(DEFAULT_CONTEXT)\n\nexport function serialize(flow: Flow) {\n const apiFlow: any = {\n data: {\n orgID: flow.orgID,\n name: flow.name,\n spec: {\n name: flow.name,\n readOnly: flow.readOnly,\n range: flow.range,\n refresh: flow.refresh,\n createdAt: flow.createdAt,\n createdBy: flow.createdBy,\n updatedAt: flow.updatedAt,\n pipes: flow.data.allIDs.map(id => {\n const meta = flow.meta.byID[id]\n // if data changes first, meta will not exist yet\n let out = {} as PipeMeta\n\n if (meta) {\n out = {\n ...flow.data.byID[id],\n id,\n title: meta.title,\n visible: meta.visible,\n }\n\n if (meta.layout) {\n out.layout = meta.layout\n }\n }\n\n return out\n }),\n },\n },\n }\n\n if (flow.id) {\n apiFlow.data.id = flow.id\n }\n\n return apiFlow\n}\n\nexport function hydrate(data) {\n const flow = {\n ...JSON.parse(JSON.stringify(EMPTY_NOTEBOOK)),\n name: data.name || EMPTY_NOTEBOOK.name,\n range: data.spec.range,\n refresh: data.spec.refresh,\n readOnly: data.spec.readOnly,\n createdAt: data.createdAt,\n updatedAt: data.updatedAt,\n createdBy: data.createdBy,\n isDirty: data?.isDirty ?? true,\n }\n if (data.id) {\n flow.id = data.id\n }\n if (data.orgID) {\n flow.orgID = data.orgID\n }\n\n if (!data?.spec?.pipes) {\n return flow\n }\n data.spec.pipes.forEach(pipe => {\n const id = pipe.id || `local_${nanoid()}`\n\n flow.data.allIDs.push(id)\n flow.meta.allIDs.push(id)\n\n const meta = {\n title: pipe.title,\n visible: pipe.visible,\n } as PipeMeta\n\n if (pipe.layout) {\n meta.layout = pipe.layout\n delete pipe.layout\n }\n\n delete pipe.title\n delete pipe.visible\n\n flow.data.byID[id] = pipe\n flow.meta.byID[id] = meta\n })\n\n return flow\n}\n\nexport const FlowListProvider: FC = ({children}) => {\n const [flows, setFlows] = useLocalStorageState()\n const [currentID, setCurrentID] = useState(null)\n const org = useSelector(getOrg)\n\n const dispatch = useDispatch()\n useEffect(() => {\n migrate()\n getAll()\n }, [])\n\n const clone = async (id: string): Promise => {\n if (!flows.hasOwnProperty(id)) {\n throw new Error(`${PROJECT_NAME} not found`)\n }\n\n try {\n const resp = await getNotebook({id})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const _flow = hydrate(resp.data)\n _flow.name = setCloneName(_flow.name)\n delete _flow.id\n\n const response = await postNotebook(serialize(_flow))\n\n if (response.status !== 200) {\n throw new Error(response.data.message)\n }\n\n return response.data.id\n } catch (error) {\n console.error({error})\n }\n }\n\n const add = (flow?: Flow): Promise => {\n let _flow\n\n if (!flow) {\n _flow = hydrate({\n ...TEMPLATES['default'].init(),\n name: DEFAULT_PROJECT_NAME,\n orgID: org.id,\n })\n } else {\n _flow = {\n name: flow.name,\n orgID: flow.orgID,\n range: flow.range,\n refresh: flow.refresh,\n data: flow.data,\n meta: flow.meta,\n readOnly: flow.readOnly,\n createdAt: flow.createdAt,\n updatedAt: flow.updatedAt,\n }\n }\n\n return createAPI(serialize(_flow))\n .then(flow => {\n setFlows({\n ...flows,\n [flow.id]: hydrate(flow),\n })\n\n return flow.id\n })\n .catch(() => {\n dispatch(notify(notebookCreateFail()))\n })\n }\n\n const update = useCallback(\n async (id: string, flow: Partial) => {\n try {\n if (!flows.hasOwnProperty(id)) {\n throw new Error(`${PROJECT_NAME} not found`)\n }\n\n if (CLOUD) {\n const resp = await patchNotebook({\n id: id,\n data: {\n name: flow.name,\n orgID: org.id,\n },\n })\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n setFlows(prevFlows => ({\n ...prevFlows,\n [id]: {\n ...prevFlows[id],\n name: flow.name,\n },\n }))\n } else {\n const _flow = flows[id]\n\n const data = {\n ..._flow,\n name: setCloneName(_flow.name),\n }\n\n return await add(data)\n }\n } catch (error) {\n console.error({error})\n }\n },\n [setFlows, org.id, flows] // eslint-disable-line react-hooks/exhaustive-deps\n )\n\n const remove = async (id: string) => {\n const _flows = {\n ...flows,\n }\n try {\n await deleteAPI({id})\n dispatch(notify(notebookDeleteSuccess()))\n } catch (error) {\n dispatch(notify(notebookDeleteFail()))\n }\n\n delete _flows[id]\n if (currentID === id) {\n setCurrentID(null)\n }\n\n setFlows(_flows)\n }\n\n const getAll = useCallback(async (): Promise => {\n const data = await getAllAPI(org.id)\n if (data && data.flows) {\n const _flows = {}\n if (CLOUD) {\n data.flows.forEach(flow => {\n _flows[flow.id] = {\n name: flow.name,\n createdAt: flow.createdAt,\n createdBy: flow.createdBy,\n updatedAt: flow.updatedAt,\n }\n })\n } else {\n data.flows.forEach(f => {\n _flows[f.id] = hydrate(f)\n })\n }\n setFlows(_flows)\n }\n }, [org.id, setFlows])\n\n const migrate = async () => {\n const localFlows = Object.keys(flows).filter(id => id.includes('local'))\n if (!localFlows.length) {\n return\n }\n\n const _flows = await migrateLocalFlowsToAPI(\n org.id,\n flows,\n serialize,\n dispatch\n )\n setFlows({..._flows})\n if (currentID && currentID.includes('local')) {\n // if we migrated the local currentID flow, reset currentID\n setCurrentID(Object.keys(_flows)[0])\n }\n }\n\n return (\n \n {children}\n \n )\n}\n\nexport default FlowListProvider\n","// Libraries\nimport memoizeOne from 'memoize-one'\nimport {get} from 'lodash'\nimport {fromFlux, Table} from '@influxdata/giraffe'\n\n// Utils\nimport {\n defaultXColumn,\n defaultYColumn,\n defaultYSeriesColumns,\n getNumericColumns as getNumericColumnsUtil,\n getGroupableColumns as getGroupableColumnsUtil,\n getStringColumns as getStringColumnsUtil,\n getMainColumnName,\n} from 'src/shared/utils/vis'\n\nimport {\n calcWindowPeriodForDuration,\n getWindowPeriodFromVariables,\n} from 'src/variables/utils/getWindowVars'\nimport {\n timeRangeToDuration,\n parseDuration,\n durationToMilliseconds,\n millisecondsToDuration,\n} from 'src/shared/utils/duration'\n\n// Selectors\nimport {getAllVariables} from 'src/variables/selectors'\nimport {getTimeRange} from 'src/dashboards/selectors'\n\n// Types\nimport {\n AppState,\n BandViewProperties,\n DashboardDraftQuery,\n DashboardQuery,\n NewView,\n QueryView,\n TimeRange,\n} from 'src/types'\n\n// Constants\nimport {AGG_WINDOW_AUTO} from 'src/timeMachine/constants/queryBuilder'\n\nexport const getActiveTimeMachine = (state: AppState) => {\n if (!state.timeMachines) {\n return null\n }\n\n const {activeTimeMachineID, timeMachines} = state.timeMachines\n const timeMachine = timeMachines[activeTimeMachineID]\n\n return timeMachine\n}\n\nexport const getActiveCellID = (state: AppState) => {\n return getActiveTimeMachine(state)?.view.cellID\n}\n\nexport const getActiveGraphType = (state: AppState): string => {\n return get(getActiveTimeMachine(state), 'view.properties.type', 'xy')\n}\n\nexport const getIsInCheckOverlay = (state: AppState): boolean => {\n return state.timeMachines.activeTimeMachineID === 'alerting'\n}\n\nexport const getActiveQuery = (state: AppState): DashboardDraftQuery => {\n const tm = getActiveTimeMachine(state)\n if (!tm) {\n return {\n text: '',\n hidden: true,\n }\n }\n\n const {draftQueries, activeQueryIndex} = tm\n return draftQueries[activeQueryIndex]\n}\n\nexport const getActiveQueryIndex = (state: AppState): number => {\n const activeTimeMachine = getActiveTimeMachine(state)\n if (activeTimeMachine) {\n return activeTimeMachine.activeQueryIndex\n }\n return 0\n}\n\n/*\n Get the value of the `v.windowPeriod` variable for the currently active query, in milliseconds.\n*/\n// TODO kill this function\nexport const getActiveWindowPeriod = (state: AppState) => {\n const {text} = getActiveQuery(state)\n const variables = getAllVariables(state)\n return getWindowPeriodFromVariables(text, variables)\n}\n\nexport const getWindowPeriodFromTimeRange = (state: AppState): string => {\n const timeRange = getTimeRange(state)\n if (timeRange.type === 'selectable-duration') {\n return millisecondsToDuration(timeRange.windowPeriod)\n }\n\n if (timeRange.type === 'custom') {\n const upper = Date.parse(timeRange.upper)\n const lower = Date.parse(timeRange.lower)\n return millisecondsToDuration(calcWindowPeriodForDuration(upper - lower))\n }\n\n throw new Error(\n 'Unknown timeRange type provided to getWindowPeriodFromTimeRange'\n )\n}\n\nconst getVisTableMemoized = memoizeOne(fromFlux)\n\nexport const getVisTable = (\n state: AppState\n): {table: Table; fluxGroupKeyUnion: string[]; resultColumnNames: string[]} => {\n const files = getActiveTimeMachine(state).queryResults.files || []\n const {table, fluxGroupKeyUnion, resultColumnNames} = getVisTableMemoized(\n files.join('\\n\\n')\n )\n\n return {table, fluxGroupKeyUnion, resultColumnNames}\n}\n\nconst getNumericColumnsMemoized = memoizeOne(getNumericColumnsUtil)\nconst getStringColumnsMemoized = memoizeOne(getStringColumnsUtil)\n\nexport const getNumericColumns = (state: AppState): string[] => {\n const {table} = getVisTable(state)\n\n return getNumericColumnsMemoized(table)\n}\n\nexport const getStringColumns = (state: AppState): string[] => {\n const {table} = getVisTable(state)\n\n return getStringColumnsMemoized(table)\n}\n\nconst getGroupableColumnsMemoized = memoizeOne(getGroupableColumnsUtil)\n\nexport const getGroupableColumns = (state: AppState): string[] => {\n const {table} = getVisTable(state)\n\n return getGroupableColumnsMemoized(table)\n}\n\nexport const getXColumnSelection = (state: AppState): string => {\n const {table} = getVisTable(state)\n const preferredXColumnKey = get(\n getActiveTimeMachine(state),\n 'view.properties.xColumn'\n )\n\n return defaultXColumn(table, preferredXColumnKey)\n}\n\nexport const getYColumnSelection = (state: AppState): string => {\n const {table} = getVisTable(state)\n const tm = getActiveTimeMachine(state)\n const preferredYColumnKey = get(tm, 'view.properties.yColumn')\n\n if (tm.view.properties.type === 'mosaic') {\n return ''\n }\n return defaultYColumn(table, preferredYColumnKey)\n}\n\nexport const getYSeriesColumns = (state: AppState): Array => {\n const {table} = getVisTable(state)\n const tm = getActiveTimeMachine(state)\n const preferredYSeriesColumns = get(tm, 'view.properties.ySeriesColumns')\n\n if (tm.view.properties.type === 'mosaic') {\n return defaultYSeriesColumns(table, preferredYSeriesColumns)\n }\n return []\n}\n\nconst getGroupableColumnSelection = (\n validColumns: string[],\n preference: string[],\n fluxGroupKeyUnion: string[]\n): string[] => {\n if (preference && preference.every(col => validColumns.includes(col))) {\n return preference\n }\n\n return fluxGroupKeyUnion\n}\n\nconst getFillColumnsSelectionMemoized = memoizeOne(getGroupableColumnSelection)\n\nconst getSymbolColumnsSelectionMemoized = memoizeOne(\n getGroupableColumnSelection\n)\n// if annotations are off, then render just won't show them,\n// so ok to retrieve no matter the flag state\nexport const getAnnotations = (state: AppState) => {\n return state.annotations.annotations\n}\n\nexport const getFillColumnsSelection = (state: AppState): string[] => {\n const {table} = getVisTable(state)\n const tm = getActiveTimeMachine(state)\n const graphType = tm.view.properties.type\n let validFillColumns\n if (graphType === 'mosaic') {\n validFillColumns = getStringColumnsMemoized(table)\n } else {\n validFillColumns = getGroupableColumns(state)\n }\n\n const preference = get(\n getActiveTimeMachine(state),\n 'view.properties.fillColumns'\n )\n\n if (graphType === 'mosaic') {\n // user hasn't selected a fill column yet\n if (preference === null) {\n // check if value is a string[]\n for (const key of validFillColumns) {\n if (key.startsWith('_value')) {\n return [key]\n }\n }\n // check if value is a numeric column\n if (table.columnKeys.includes('_value')) {\n return []\n }\n }\n }\n\n const {fluxGroupKeyUnion} = getVisTable(state)\n\n return getFillColumnsSelectionMemoized(\n validFillColumns,\n preference,\n fluxGroupKeyUnion\n )\n}\n\nexport const getSymbolColumnsSelection = (state: AppState): string[] => {\n const validSymbolColumns = getGroupableColumns(state)\n const preference = get(\n getActiveTimeMachine(state),\n 'view.properties.symbolColumns'\n )\n const {fluxGroupKeyUnion} = getVisTable(state)\n\n return getSymbolColumnsSelectionMemoized(\n validSymbolColumns,\n preference,\n fluxGroupKeyUnion\n )\n}\n\nexport const getStartTime = (timeRange: TimeRange) => {\n if (!timeRange) {\n return Infinity\n }\n switch (timeRange.type) {\n case 'custom':\n return new Date(timeRange.lower).valueOf()\n case 'selectable-duration': {\n const startTime = new Date()\n startTime.setSeconds(startTime.getSeconds() - timeRange.seconds)\n return startTime.getTime()\n }\n case 'duration': {\n const millisecondDuration = durationToMilliseconds(\n parseDuration(timeRangeToDuration(timeRange))\n )\n const startTime = new Date()\n startTime.setMilliseconds(\n startTime.getMilliseconds() - millisecondDuration\n )\n return startTime.getTime()\n }\n default:\n throw new Error(\n 'unknown timeRange type ${timeRange.type} provided to getStartTime'\n )\n }\n}\n\nexport const getEndTime = (timeRange: TimeRange): number => {\n if (!timeRange) {\n return null\n }\n if (timeRange.type === 'custom') {\n return new Date(timeRange.upper).valueOf()\n }\n return new Date().valueOf()\n}\n\nexport const getActiveTimeRange = (\n timeRange: TimeRange,\n queries: DashboardQuery[]\n) => {\n if (!queries) {\n return timeRange\n }\n const hasVariableTimes = queries.some(\n query =>\n query.text.includes('v.timeRangeStart') ||\n query.text.includes('v.timeRangeStop')\n )\n if (hasVariableTimes) {\n return timeRange\n }\n return null\n}\n\nconst getMainColumn = (state: AppState) => {\n const {builderConfig} = getActiveQuery(state)\n const {functions} = builderConfig\n const selectedFunctions = functions.map(f => f.name)\n const view = getActiveTimeMachine(state).view as NewView\n const {upperColumn, mainColumn, lowerColumn} = view.properties\n return getMainColumnName(\n selectedFunctions,\n upperColumn,\n mainColumn,\n lowerColumn\n )\n}\n\nexport const getSaveableView = (state: AppState): QueryView & {id?: string} => {\n const {view, draftQueries} = getActiveTimeMachine(state)\n\n let saveableView: QueryView & {id?: string} = {\n ...view,\n properties: {\n ...view.properties,\n queries: draftQueries,\n },\n }\n\n // TODO: remove all of these conditionals\n if (saveableView.properties.type === 'mosaic') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n ySeriesColumns: getYSeriesColumns(state),\n fillColumns: getFillColumnsSelection(state),\n },\n }\n }\n\n if (saveableView.properties.type === 'histogram') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n fillColumns: getFillColumnsSelection(state),\n },\n }\n }\n\n if (saveableView.properties.type === 'heatmap') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n yColumn: getYColumnSelection(state),\n },\n }\n }\n\n if (saveableView.properties.type === 'scatter') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n yColumn: getYColumnSelection(state),\n fillColumns: getFillColumnsSelection(state),\n symbolColumns: getSymbolColumnsSelection(state),\n },\n }\n }\n\n if (saveableView.properties.type === 'xy') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n yColumn: getYColumnSelection(state),\n },\n }\n }\n\n if (saveableView.properties.type === 'band') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n yColumn: getYColumnSelection(state),\n mainColumn: getMainColumn(state),\n // 'upperColumn' should NOT be saved here, see below\n // 'lowerColumn' should NOT be saved here, see below\n /*\n REASON:\n In the aggregate function selector of the editor,\n there is no way to tell which aggregate function will be an upper or lower column.\n\n The only way to tell is to wait until the user explicitly sets\n upper and lower columns inside the Band Options -- which saves them.\n */\n },\n }\n }\n\n if (saveableView.properties.type === 'line-plus-single-stat') {\n saveableView = {\n ...saveableView,\n properties: {\n ...saveableView.properties,\n xColumn: getXColumnSelection(state),\n yColumn: getYColumnSelection(state),\n },\n }\n }\n\n return saveableView\n}\n\nexport const getWindowPeriodFromQueryBuilder = (\n state: AppState,\n viewId: string\n): string =>\n get(\n state,\n `resources.views.byID.[${viewId}].properties.queries.[0].builderConfig.aggregateWindow.period`,\n AGG_WINDOW_AUTO\n )\n","import React, {FC, ReactElement, useState, useContext} from 'react'\n\ninterface PopupContextType {\n launch: (element: React.ReactNode, data: any) => void\n data: any\n element: ReactElement | null\n closeFn: () => void\n}\n\nconst DEFAULT_CONTEXT: PopupContextType = {\n launch: () => {},\n data: null,\n element: null,\n closeFn: () => {},\n}\n\nexport const PopupContext =\n React.createContext(DEFAULT_CONTEXT)\n\nexport const PopupDrawer: FC = () => {\n const {element} = useContext(PopupContext)\n\n if (!element) {\n return null\n }\n\n return element\n}\n\nexport const PopupProvider: FC = ({children}) => {\n const [element, setElement] = useState(null)\n const [data, setData] = useState(null)\n\n const launch = (_element, _data) => {\n setElement(_element)\n setData(_data)\n }\n const closeFn = () => {\n setElement(null)\n setData(null)\n }\n\n return (\n \n {children}\n \n )\n}\n","// Libraries\nimport {replace, RouterAction} from 'connected-react-router'\nimport {Dispatch} from 'redux'\n\n// Actions\nimport {notify, Action as NotifyAction} from 'src/shared/actions/notifications'\n\n// Utils\nimport {stripPrefix} from 'src/utils/basepath'\nimport {validateAndTypeRange} from 'src/dashboards/utils/time'\n\n// Constants\nimport * as copy from 'src/shared/copy/notifications'\nimport {DEFAULT_TIME_RANGE} from 'src/shared/constants/timeRanges'\n\n// Types\nimport {TimeRange} from 'src/types'\n\nexport type Action =\n | SetDashboardTimeRangeAction\n | DeleteTimeRangeAction\n | RetainRangesDashTimeV1Action\n\nexport enum ActionTypes {\n DeleteTimeRange = 'DELETE_TIME_RANGE',\n SetDashboardTimeRange = 'SET_DASHBOARD_TIME_RANGE',\n RetainRangesDashboardTimeV1 = 'RETAIN_RANGES_DASHBOARD_TIME_V1',\n}\n\nexport interface DeleteTimeRangeAction {\n type: ActionTypes.DeleteTimeRange\n payload: {\n dashboardID: string\n }\n}\n\ninterface SetDashboardTimeRangeAction {\n type: ActionTypes.SetDashboardTimeRange\n payload: {\n dashboardID: string\n timeRange: TimeRange\n }\n}\n\ninterface RetainRangesDashTimeV1Action {\n type: ActionTypes.RetainRangesDashboardTimeV1\n payload: {\n dashboardIDs: string[]\n }\n}\n\nexport const deleteTimeRange = (\n dashboardID: string\n): DeleteTimeRangeAction => ({\n type: ActionTypes.DeleteTimeRange,\n payload: {dashboardID},\n})\n\nexport const setDashboardTimeRange = (\n dashboardID: string,\n timeRange: TimeRange\n): SetDashboardTimeRangeAction => ({\n type: ActionTypes.SetDashboardTimeRange,\n payload: {dashboardID, timeRange},\n})\n\nexport const retainRangesDashTimeV1 = (\n dashboardIDs: string[]\n): RetainRangesDashTimeV1Action => ({\n type: ActionTypes.RetainRangesDashboardTimeV1,\n payload: {dashboardIDs},\n})\n\nexport const updateQueryParams = (updatedQueryParams): RouterAction => {\n const params = new URLSearchParams(window.location.search)\n Object.entries(updatedQueryParams).forEach(([k, v]) => {\n if (!v) {\n return\n }\n params.set(k, v as string)\n })\n\n return replace({\n pathname: stripPrefix(window.location.pathname),\n search: params.toString(),\n })\n}\n\nexport const updateQueryVars = varsObj => {\n const params = new URLSearchParams(window.location.search)\n Object.entries(varsObj).forEach(([k, v]) => {\n params.set(`vars[${k}]`, v as string)\n })\n\n return replace({\n pathname: stripPrefix(window.location.pathname),\n search: params.toString(),\n })\n}\n\nexport const updateTimeRangeFromQueryParams =\n (dashboardID: string) =>\n (\n dispatch: Dispatch,\n getState\n ): void => {\n const {ranges} = getState()\n const params = new URLSearchParams(window.location.search)\n\n const validatedTimeRangeFromQuery = validateAndTypeRange({\n lower: params.get('lower'),\n upper: params.get('upper'),\n })\n\n const validatedTimeRange =\n validatedTimeRangeFromQuery || ranges[dashboardID] || DEFAULT_TIME_RANGE\n\n if (\n (params.get('lower') || params.get('upper')) &&\n !validatedTimeRangeFromQuery\n ) {\n dispatch(notify(copy.invalidTimeRangeValueInURLQuery()))\n }\n\n dispatch(setDashboardTimeRange(dashboardID, validatedTimeRange))\n\n dispatch(\n updateQueryParams({\n lower: validatedTimeRange.lower,\n upper: validatedTimeRange.upper,\n })\n )\n }\n","export const MAX_THRESHOLDS = 5\nexport const MIN_THRESHOLDS = 2\n\nexport const COLOR_TYPE_MIN = 'min'\nexport const DEFAULT_VALUE_MIN = 0\nexport const COLOR_TYPE_MAX = 'max'\nexport const DEFAULT_VALUE_MAX = 100\nexport const COLOR_TYPE_THRESHOLD = 'threshold'\n\nexport const THRESHOLD_TYPE_TEXT = 'text'\nexport const THRESHOLD_TYPE_BG = 'background'\n\nexport const BASE_THRESHOLD_ID = 'base'\n\nexport const THRESHOLD_COLORS = [\n {\n hex: '#BF3D5E',\n name: 'ruby',\n },\n {\n hex: '#DC4E58',\n name: 'fire',\n },\n {\n hex: '#F95F53',\n name: 'curacao',\n },\n {\n hex: '#F48D38',\n name: 'tiger',\n },\n {\n hex: '#FFB94A',\n name: 'pineapple',\n },\n {\n hex: '#FFD255',\n name: 'thunder',\n },\n {\n hex: '#7CE490',\n name: 'honeydew',\n },\n {\n hex: '#4ED8A0',\n name: 'rainforest',\n },\n {\n hex: '#32B08C',\n name: 'viridian',\n },\n {\n hex: '#4591ED',\n name: 'ocean',\n },\n {\n hex: '#22ADF6',\n name: 'pool',\n },\n {\n hex: '#00C9FF',\n name: 'laser',\n },\n {\n hex: '#513CC6',\n name: 'planet',\n },\n {\n hex: '#7A65F2',\n name: 'star',\n },\n {\n hex: '#9394FF',\n name: 'comet',\n },\n {\n hex: '#383846',\n name: 'pepper',\n },\n {\n hex: '#545667',\n name: 'graphite',\n },\n {\n hex: '#ffffff',\n name: 'white',\n },\n {\n hex: '#292933',\n name: 'castle',\n },\n]\n\nexport const DEFAULT_GAUGE_COLORS = [\n {\n type: COLOR_TYPE_MIN,\n hex: THRESHOLD_COLORS[11].hex,\n id: '0',\n name: THRESHOLD_COLORS[11].name,\n value: DEFAULT_VALUE_MIN,\n },\n {\n type: COLOR_TYPE_MAX,\n hex: THRESHOLD_COLORS[14].hex,\n id: '1',\n name: THRESHOLD_COLORS[14].name,\n value: DEFAULT_VALUE_MAX,\n },\n]\n\nexport const DEFAULT_THRESHOLDS_GEO_COLORS = [\n {\n type: COLOR_TYPE_MIN,\n value: DEFAULT_VALUE_MIN,\n hex: THRESHOLD_COLORS[13].hex,\n id: '0',\n name: THRESHOLD_COLORS[13].name,\n },\n {\n type: THRESHOLD_TYPE_TEXT,\n value: 50,\n hex: THRESHOLD_COLORS[13].hex,\n id: '1',\n name: THRESHOLD_COLORS[13].name,\n },\n {\n type: COLOR_TYPE_MAX,\n value: DEFAULT_VALUE_MAX,\n hex: THRESHOLD_COLORS[13].hex,\n id: '2',\n name: THRESHOLD_COLORS[13].name,\n },\n]\n\nexport const DEFAULT_THRESHOLDS_LIST_COLORS = [\n {\n type: THRESHOLD_TYPE_TEXT,\n hex: THRESHOLD_COLORS[11].hex,\n id: BASE_THRESHOLD_ID,\n name: THRESHOLD_COLORS[11].name,\n value: 0,\n },\n]\n\nexport const DEFAULT_THRESHOLDS_TABLE_COLORS = [\n {\n type: THRESHOLD_TYPE_TEXT,\n hex: THRESHOLD_COLORS[17].hex,\n id: BASE_THRESHOLD_ID,\n name: THRESHOLD_COLORS[17].name,\n value: 0,\n },\n]\n","import {File} from 'src/types/ast'\nimport {\n parse as flux_parse,\n format_from_js_file as flux_format_from_js_file,\n} from '@influxdata/flux-lsp-browser'\n/*\n NOTE: This is a work around for flux being generated (from rust) for the browser and jest tests running in\n a node environment (this is only for handling tests). If a test requires a specific AST result\n then you will need to mock that out in the test.\n*/\nexport const parse = (script): File => {\n if (window) {\n return flux_parse(script)\n } else {\n return {\n type: 'File',\n package: {\n name: {\n name: 'fake',\n type: 'Identifier',\n },\n type: 'PackageClause',\n },\n imports: [],\n body: [],\n }\n }\n}\n\nexport const format_from_js_file = (script): string => {\n if (window) {\n return flux_format_from_js_file(script)\n } else {\n return script\n }\n}\n","// Libraries\nimport {get, isEmpty, flatMap} from 'lodash'\nimport {normalize} from 'normalizr'\n\n// Schemas\nimport {arrayOfVariables, variableSchema} from 'src/schemas/variables'\n\n// Utils\nimport {\n findIncludedsFromRelationships,\n findLabelsToCreate,\n findIncludedFromRelationship,\n findVariablesToCreate,\n findIncludedVariables,\n hasLabelsRelationships,\n getLabelRelationships,\n} from 'src/templates/utils/'\nimport {addLabelDefaults} from 'src/labels/utils'\n\n// API\nimport {\n getDashboard as apiGetDashboard,\n getLabels as apiGetLabels,\n postLabel as apiPostLabel,\n getVariable as apiGetVariable,\n getVariables as apiGetVariables,\n postVariable as apiPostVariable,\n postVariablesLabel as apiPostVariablesLabel,\n postDashboard as apiPostDashboard,\n postDashboardsLabel as apiPostDashboardsLabel,\n postDashboardsCell as apiPostDashboardsCell,\n patchDashboardsCellsView as apiPatchDashboardsCellsView,\n deleteStack as apiDeleteStack,\n getStacks,\n patchStack,\n postTemplatesApply,\n Error as PkgError,\n TemplateApply,\n TemplateSummary,\n Template,\n} from 'src/client'\nimport {addDashboardDefaults} from 'src/schemas/dashboards'\n\n// Types\nimport {\n DashboardTemplate,\n Dashboard,\n InstalledStack,\n Cell,\n CellIncluded,\n LabelIncluded,\n ViewIncluded,\n TemplateBase,\n VariableTemplate,\n Variable,\n VariableEntities,\n PostVariable,\n} from 'src/types'\n\n// Create Dashboard Templates\nexport const createDashboardFromTemplate = async (\n template: DashboardTemplate,\n orgID: string\n): Promise => {\n try {\n const {content} = template\n\n if (content.data.type !== 'dashboard' || template.meta.version !== '1') {\n throw new Error('Cannot create dashboard from this template')\n }\n\n const resp = await apiPostDashboard({\n data: {\n orgID,\n ...content.data.attributes,\n },\n })\n\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n\n const createdDashboard = addDashboardDefaults(resp.data as Dashboard)\n\n // associate imported label id with new label\n const labelMap = await createLabelsFromTemplate(template, orgID)\n\n await Promise.all([\n await addDashboardLabelsFromTemplate(\n template,\n labelMap,\n createdDashboard\n ),\n await createCellsFromTemplate(template, createdDashboard),\n ])\n\n await createVariablesFromTemplate(template, labelMap, orgID)\n\n const getResp = await apiGetDashboard({dashboardID: resp.data.id})\n\n if (getResp.status !== 200) {\n throw new Error(getResp.data.message)\n }\n\n return getResp.data as Dashboard\n } catch (error) {\n console.error(error)\n throw new Error(error.message)\n }\n}\n\nexport const createResourceFromPkgerTemplate = async (\n template: Template,\n orgID: string\n): Promise => {\n const response = await postTemplatesApply({\n data: {\n orgID,\n dryRun: false,\n template: {\n contentType: 'json',\n contents: template,\n },\n },\n })\n\n if (response.status === 500) {\n throw new Error(response.data.message)\n }\n}\n\nconst addDashboardLabelsFromTemplate = async (\n template: DashboardTemplate,\n labelMap: LabelMap,\n dashboard: Dashboard\n) => {\n try {\n const labelRelationships = getLabelRelationships(template.content.data)\n const labelIDs = labelRelationships.map(l => labelMap[l.id] || '')\n const pending = labelIDs.map(labelID =>\n apiPostDashboardsLabel({dashboardID: dashboard.id, data: {labelID}})\n )\n const resolved = await Promise.all(pending)\n if (resolved.length > 0 && resolved.some(r => r.status !== 201)) {\n throw new Error(\n 'An error occurred adding dashboard labels from the template'\n )\n }\n } catch (e) {\n console.error(e)\n }\n}\n\ntype LabelMap = {[importedID: string]: CreatedLabelID}\ntype CreatedLabelID = string\n\nconst createLabelsFromTemplate = async (\n template: T,\n orgID: string\n): Promise => {\n const {\n content: {data, included},\n } = template\n\n const labeledResources = [data, ...included].filter(r =>\n hasLabelsRelationships(r)\n )\n\n if (isEmpty(labeledResources)) {\n return {}\n }\n\n const labelRelationships = flatMap(labeledResources, r =>\n getLabelRelationships(r)\n )\n\n const includedLabels = findIncludedsFromRelationships(\n included,\n labelRelationships\n )\n\n const resp = await apiGetLabels({query: {orgID}})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const existingLabels = resp.data.labels.map(l => addLabelDefaults(l))\n\n const foundLabelsToCreate = findLabelsToCreate(\n existingLabels,\n includedLabels\n ).map(l => ({\n orgID,\n name: get(l, 'attributes.name', ''),\n properties: get(l, 'attributes.properties', {}),\n }))\n\n const promisedLabels = foundLabelsToCreate.map(lab => {\n return apiPostLabel({\n data: lab,\n })\n .then(res => {\n const out = get(res, 'data.label', '')\n return out\n })\n .then(lab => addLabelDefaults(lab))\n })\n\n const createdLabels = await Promise.all(promisedLabels)\n\n const allLabels = [...createdLabels, ...existingLabels]\n\n const labelMap: LabelMap = {}\n\n includedLabels.forEach(label => {\n const createdLabel = allLabels.find(l => l.name === label.attributes.name)\n\n labelMap[label.id] = createdLabel.id\n })\n\n return labelMap\n}\n\nconst createCellsFromTemplate = async (\n template: DashboardTemplate,\n createdDashboard: Dashboard\n) => {\n const {\n content: {data, included},\n } = template\n\n if (!data.relationships || !data.relationships['cell']) {\n return\n }\n\n const cellRelationships = data.relationships['cell'].data\n\n const cellsToCreate = findIncludedsFromRelationships(\n included,\n cellRelationships\n )\n\n const pendingCells = cellsToCreate.map(c => {\n const {\n attributes: {x, y, w, h},\n } = c\n return apiPostDashboardsCell({\n dashboardID: createdDashboard.id,\n data: {x, y, w, h},\n })\n })\n\n const cellResponses = await Promise.all(pendingCells)\n\n if (cellResponses.length > 0 && cellResponses.some(r => r.status !== 201)) {\n throw new Error('An error occurred creating cells from the templates')\n }\n\n const responses = cellResponses.map(resp => resp.data as Cell)\n\n createViewsFromTemplate(\n template,\n responses,\n cellsToCreate,\n createdDashboard.id\n )\n}\n\nconst createViewsFromTemplate = async (\n template: DashboardTemplate,\n cellResponses: Cell[],\n cellsToCreate: CellIncluded[],\n dashboardID: string\n) => {\n const viewsToCreate = cellsToCreate.map(c => {\n const {\n content: {included},\n } = template\n\n const viewRelationship = c.relationships['view'].data\n\n return findIncludedFromRelationship(\n included,\n viewRelationship\n )\n })\n\n const pendingViews = viewsToCreate.map((v, i) => {\n return apiPatchDashboardsCellsView({\n dashboardID,\n cellID: cellResponses[i].id,\n data: v.attributes,\n })\n })\n\n await Promise.all(pendingViews)\n}\n\nconst createVariablesFromTemplate = async (\n template: DashboardTemplate | VariableTemplate,\n labelMap: LabelMap,\n orgID: string\n) => {\n const {\n content: {data, included},\n } = template\n if (!data.relationships || !data.relationships['variable']) {\n return\n }\n const variablesIncluded = findIncludedVariables(included)\n\n const resp = await apiGetVariables({query: {orgID}})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const normVariables = normalize(\n resp.data.variables,\n arrayOfVariables\n )\n\n const variables = Object.values(\n get(normVariables, 'entities.variables', {})\n )\n\n const variablesToCreate = findVariablesToCreate(\n variables,\n variablesIncluded\n ).map(v => ({...v.attributes, orgID}))\n\n const pendingVariables = variablesToCreate.map(vars =>\n apiPostVariable({data: vars as PostVariable})\n )\n\n const resolvedVariables = await Promise.all(pendingVariables)\n\n if (\n resolvedVariables.length > 0 &&\n resolvedVariables.every(r => r.status !== 201)\n ) {\n throw new Error('An error occurred creating the variables from templates')\n }\n\n const createdVariables = await Promise.all(pendingVariables)\n\n const normCreated = createdVariables.map(v => {\n const normVar = normalize(\n v.data,\n variableSchema\n )\n return normVar.entities.variables[normVar.result]\n })\n\n const allVars = [...variables, ...normCreated]\n\n const addLabelsToVars = variablesIncluded.map(async includedVar => {\n const variable = allVars.find(v => v.name === includedVar.attributes.name)\n const labelRelationships = getLabelRelationships(includedVar)\n const labelIDs = labelRelationships.map(l => labelMap[l.id] || '')\n const pending = labelIDs.map(async labelID => {\n await apiPostVariablesLabel({variableID: variable.id, data: {labelID}})\n })\n await Promise.all(pending)\n })\n\n await Promise.all(addLabelsToVars)\n}\n\nexport const createVariableFromTemplate = async (\n template: VariableTemplate,\n orgID: string\n) => {\n const {content} = template\n try {\n if (content.data.type !== 'variable' || template.meta.version !== '1') {\n throw new Error('Cannot create variable from this template')\n }\n\n const resp = await apiPostVariable({\n data: {\n ...content.data.attributes,\n orgID,\n },\n })\n\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n\n // associate imported label.id with created label\n const labelsMap = await createLabelsFromTemplate(template, orgID)\n\n await createVariablesFromTemplate(template, labelsMap, orgID)\n\n const variable = await apiGetVariable({variableID: resp.data.id})\n\n if (variable.status !== 200) {\n throw new Error(variable.data.message)\n }\n\n return variable.data\n } catch (error) {\n console.error(error)\n }\n}\n\nconst applyTemplates = async params => {\n const resp = await postTemplatesApply(params)\n if (resp.status >= 300) {\n throw new Error((resp.data as PkgError).message)\n }\n\n const summary = resp.data as TemplateSummary\n return summary\n}\n\nexport const reviewTemplate = async (orgID: string, templateUrl: string) => {\n const params = {\n data: {\n dryRun: true,\n orgID,\n remotes: [{url: templateUrl}],\n },\n }\n\n return applyTemplates(params)\n}\n\nexport const installTemplate = async (\n orgID: string,\n templateUrl: string,\n resourcesToSkip: {[key: string]: string},\n envRefs: {} = {}\n) => {\n const data: TemplateApply = {\n dryRun: false,\n orgID,\n remotes: [{url: templateUrl}],\n }\n\n if (Object.keys(resourcesToSkip).length) {\n const actions = []\n for (const resourceTemplateName in resourcesToSkip) {\n actions.push({\n action: 'skipResource',\n properties: {\n kind: resourcesToSkip[resourceTemplateName],\n resourceTemplateName,\n },\n })\n }\n data.actions = actions\n }\n\n if (Object.keys(envRefs).length) {\n data.envRefs = envRefs\n }\n\n const params = {\n data,\n }\n\n return applyTemplates(params)\n}\n\nexport const fetchStacks = async (orgID: string) => {\n const resp = await getStacks({query: {orgID}})\n\n if (resp.status >= 300) {\n throw new Error((resp.data as PkgError).message)\n }\n\n return (resp.data as {stacks: InstalledStack[]}).stacks\n}\n\nexport const deleteStack = async (stackId, orgID) => {\n const resp = await apiDeleteStack({stack_id: stackId, query: {orgID}})\n\n if (resp.status >= 300) {\n throw new Error((resp.data as PkgError).message)\n }\n\n return resp\n}\n\nexport const updateStackName = async (stackID, name) => {\n const resp = await patchStack({\n stack_id: stackID,\n data: {\n name,\n description: null,\n templateURLs: null,\n additionalResources: null,\n },\n })\n if (resp.status >= 300) {\n throw new Error((resp.data as PkgError).message)\n }\n\n return resp\n}\n\nexport const fetchReadMe = async (directory: string) => {\n const resp = await fetch(\n `https://raw.githubusercontent.com/influxdata/community-templates/master/${directory}/readme.md`\n )\n\n if (resp.status >= 300) {\n throw new Error(`Network response was not ok:' ${resp.statusText}`)\n }\n\n return resp.text()\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType, Telegraf} from 'src/types'\n\n// Schemas\nimport {labelSchema} from './labels'\n\n// Defines the schema for the \"telegrafs\" resource\nexport const telegrafSchema = new schema.Entity(\n ResourceType.Telegrafs,\n {\n labels: [labelSchema],\n },\n {\n // add buckets to metadata if not present\n processStrategy: (t: Telegraf): Telegraf => {\n if (!t.metadata) {\n return {\n ...t,\n metadata: {\n buckets: [],\n },\n }\n }\n\n if (!t.metadata.buckets) {\n return {\n ...t,\n metadata: {\n ...t.metadata,\n buckets: [],\n },\n }\n }\n\n return t\n },\n }\n)\n\nexport const arrayOfTelegrafs = [telegrafSchema]\n","import {CLOUD} from 'src/shared/constants'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nexport const shouldUseQuartzIdentity = (): boolean =>\n CLOUD && isFlagEnabled('quartzIdentity')\n","// Types\nimport {AppState, Me} from 'src/types'\nimport {RemoteDataState} from '@influxdata/clockface'\n\n// Utils\nimport {convertStringToEpoch} from 'src/shared/utils/dateTimeUtils'\n\n// Constants\nimport {CREDIT_250_EXPERIENCE_CUTOFF_EPOCH} from 'src/shared/constants'\n\nexport const getMe = (state: AppState): AppState['me'] => {\n return state.me\n}\n\nexport const getQuartzMe = (state: AppState): Me => state?.me?.quartzMe\nexport const getQuartzMeStatus = (state: AppState): RemoteDataState =>\n state?.me?.quartzMeStatus\n\nexport const shouldGetCredit250Experience = (state: AppState): boolean => {\n const accountType = state.me.quartzMe?.accountType ?? ''\n const accountCreatedAt = state.me.quartzMe?.accountCreatedAt ?? ''\n\n const accountCreatedAtEpoch = convertStringToEpoch(accountCreatedAt)\n\n if (\n accountType === 'free' &&\n accountCreatedAtEpoch < CREDIT_250_EXPERIENCE_CUTOFF_EPOCH\n ) {\n return true\n }\n return false\n}\n\nexport const shouldShowUpgradeButton = (state: AppState): boolean => {\n const {quartzMe} = state.me\n const isRegionBeta = quartzMe?.isRegionBeta ?? false\n const accountType = quartzMe?.accountType ?? 'free'\n return accountType === 'free' && isRegionBeta === false\n}\n","import {EndpointTypeRegistration} from 'src/types'\n\nexport const TEST_NOTIFICATION = 'This is a test notification'\n\nexport interface TypeLookup {\n [key: string]: EndpointTypeRegistration\n}\nexport const ENDPOINT_DEFINITIONS: TypeLookup = {}\nexport const ENDPOINT_ORDER = [\n 'slack',\n 'http',\n 'pagerduty',\n 'sendgrid',\n 'aws',\n 'mailjet',\n 'mailgun',\n 'discord',\n 'opsgenie',\n 'pushbullet',\n 'teams',\n 'telegram',\n 'sensu',\n 'zenoss',\n]\n\n// NOTE: this loads in all the modules under the current directory\n// to make it easier to add new types\nconst context = require.context(\n './endpoints',\n true,\n /^\\.\\/([^\\/])+\\/index\\.(ts|tsx)$/\n)\ncontext.keys().forEach(key => {\n const module = context(key)\n module.default((definition: EndpointTypeRegistration) => {\n if (ENDPOINT_DEFINITIONS.hasOwnProperty(definition.type)) {\n throw new Error(\n `Endpoint of type [${definition.type}] has already been registered`\n )\n }\n\n ENDPOINT_DEFINITIONS[definition.type] = {\n ...definition,\n }\n })\n})\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\n\nimport {Axis, Base, Color, CheckViewProperties} from 'src/types'\n\nexport default {\n type: 'check',\n shape: 'chronograf-v2',\n checkID: '',\n geom: 'line',\n xColumn: null,\n yColumn: null,\n position: 'overlaid',\n hoverDimension: 'auto',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: DEFAULT_LINE_COLORS as Color[],\n note: '',\n showNoteWhenEmpty: false,\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10' as Base,\n scale: 'linear',\n } as Axis,\n },\n} as CheckViewProperties\n","// Libraries\nimport React, {FunctionComponent, MouseEvent} from 'react'\n\n// Utils\nimport {useDragBehavior, DragEvent} from 'src/shared/utils/useDragBehavior'\n\n// Types\nimport {CheckStatusLevel} from 'src/types'\n\ninterface Props {\n level: CheckStatusLevel\n y: number\n onDrag: (e: DragEvent) => void\n onMouseUp: (e: MouseEvent) => void\n}\n\nconst ThresholdMarker: FunctionComponent = ({\n level,\n y,\n onDrag,\n onMouseUp,\n}) => {\n const dragTargetProps = useDragBehavior(onDrag)\n const levelClass = `threshold-marker--${level.toLowerCase()}`\n const style = {top: `${y}px`}\n\n return (\n <>\n \n \n \n )\n}\n\nexport default ThresholdMarker\n","import * as React from 'react'\nimport {useCallback} from 'react'\n\nexport interface DragEvent {\n x: number\n y: number\n type: 'dragStart' | 'drag' | 'dragStop'\n}\n\ntype MouseDownEvent = React.MouseEvent\n\nexport const useDragBehavior = (\n onDrag: (e: DragEvent) => any\n): {onMouseDown: (e: MouseDownEvent) => any} => {\n const onMouseDown = useCallback(\n (mouseDownEvent: MouseDownEvent) => {\n mouseDownEvent.stopPropagation()\n\n onDrag({\n type: 'dragStart',\n x: mouseDownEvent.pageX,\n y: mouseDownEvent.pageY,\n })\n\n const onMouseMove = mouseMoveEvent => {\n onDrag({\n type: 'drag',\n x: mouseMoveEvent.pageX,\n y: mouseMoveEvent.pageY,\n })\n }\n\n const onMouseUp = mouseUpEvent => {\n document.removeEventListener('mousemove', onMouseMove)\n document.removeEventListener('mouseup', onMouseUp)\n\n onDrag({\n type: 'dragStop',\n x: mouseUpEvent.pageX,\n y: mouseUpEvent.pageY,\n })\n }\n\n document.addEventListener('mousemove', onMouseMove)\n document.addEventListener('mouseup', onMouseUp)\n },\n [onDrag]\n )\n\n return {onMouseDown}\n}\n","// Libraries\nimport React, {FunctionComponent} from 'react'\n\n// Types\nimport {CheckStatusLevel} from 'src/types'\n\ninterface Props {\n level: CheckStatusLevel\n top: number\n height: number\n}\n\nconst ThresholdMarkerArea: FunctionComponent = ({\n level,\n top,\n height,\n}) => (\n \n)\n\nexport default ThresholdMarkerArea\n","// Libraries\nimport React, {FunctionComponent, MouseEvent} from 'react'\nimport {Scale} from '@influxdata/giraffe'\n\n// Components\nimport ThresholdMarker from 'src/shared/components/ThresholdMarker'\nimport ThresholdMarkerArea from 'src/shared/components/ThresholdMarkerArea'\n\n// Utils\nimport {isInDomain, clamp} from 'src/shared/utils/vis'\nimport {DragEvent} from 'src/shared/utils/useDragBehavior'\n\n// Types\nimport {RangeThreshold} from 'src/types'\n\ninterface Props {\n yScale: Scale\n yDomain: number[]\n threshold: RangeThreshold\n onChangeMaxPos: (e: DragEvent) => void\n onChangeMinPos: (e: DragEvent) => void\n onMouseUp: (e: MouseEvent) => void\n}\n\nconst RangeThresholdMarkers: FunctionComponent = ({\n yScale,\n yDomain,\n threshold: {level, within, min, max},\n onChangeMinPos,\n onChangeMaxPos,\n onMouseUp,\n}) => {\n const minY = yScale(clamp(min, yDomain))\n const maxY = yScale(clamp(max, yDomain))\n\n return (\n <>\n {isInDomain(min, yDomain) && (\n \n )}\n {isInDomain(max, yDomain) && (\n \n )}\n {within ? (\n \n ) : (\n <>\n {max <= yDomain[1] && (\n \n )}\n {min >= yDomain[0] && (\n \n )}\n \n )}\n \n )\n}\n\nexport default RangeThresholdMarkers\n","// Libraries\nimport React, {FunctionComponent, MouseEvent} from 'react'\nimport {Scale} from '@influxdata/giraffe'\n\n// Components\nimport ThresholdMarker from 'src/shared/components/ThresholdMarker'\nimport ThresholdMarkerArea from 'src/shared/components/ThresholdMarkerArea'\n\n// Utils\nimport {clamp, isInDomain} from 'src/shared/utils/vis'\nimport {DragEvent} from 'src/shared/utils/useDragBehavior'\n\n// Types\nimport {LesserThreshold} from 'src/types'\n\ninterface Props {\n yScale: Scale\n yDomain: number[]\n threshold: LesserThreshold\n onChangePos: (e: DragEvent) => void\n onMouseUp: (e: MouseEvent) => void\n}\n\nconst LessThresholdMarker: FunctionComponent = ({\n yScale,\n yDomain,\n threshold: {level, value},\n onChangePos,\n onMouseUp,\n}) => {\n const y = yScale(clamp(value, yDomain))\n\n return (\n <>\n {isInDomain(value, yDomain) && (\n \n )}\n {value >= yDomain[0] && (\n \n )}\n \n )\n}\n\nexport default LessThresholdMarker\n","// Libraries\nimport React, {FunctionComponent, MouseEvent} from 'react'\nimport {Scale} from '@influxdata/giraffe'\n\n// Components\nimport ThresholdMarker from 'src/shared/components/ThresholdMarker'\nimport ThresholdMarkerArea from 'src/shared/components/ThresholdMarkerArea'\n\n// Utils\nimport {isInDomain, clamp} from 'src/shared/utils/vis'\nimport {DragEvent} from 'src/shared/utils/useDragBehavior'\n\n// Types\nimport {GreaterThreshold} from 'src/types'\n\ninterface Props {\n yScale: Scale\n yDomain: number[]\n threshold: GreaterThreshold\n onChangePos: (e: DragEvent) => void\n onMouseUp: (e: MouseEvent) => void\n}\n\nconst GreaterThresholdMarker: FunctionComponent = ({\n yDomain,\n yScale,\n threshold: {level, value},\n onChangePos,\n onMouseUp,\n}) => {\n const y = yScale(clamp(value, yDomain))\n\n return (\n <>\n {isInDomain(value, yDomain) && (\n \n )}\n {value <= yDomain[1] && (\n \n )}\n \n )\n}\n\nexport default GreaterThresholdMarker\n","// Libraries\nimport React, {useRef, useState, FunctionComponent} from 'react'\nimport {Scale} from '@influxdata/giraffe'\nimport {debounce, round} from 'lodash'\n\n// Components\nimport RangeThresholdMarkers from 'src/shared/components/RangeThresholdMarkers'\nimport LessThresholdMarker from 'src/shared/components/LessThresholdMarker'\nimport GreaterThresholdMarker from 'src/shared/components/GreaterThresholdMarker'\n\n// Utils\nimport {clamp} from 'src/shared/utils/vis'\n\n// Types\nimport {Threshold} from 'src/types'\n\n// Constants\nconst DRAGGABLE_THRESHOLD_PRECISION = 2\nconst ZOOM_IN_WAIT = 500\n\ninterface Props {\n thresholds: Threshold[]\n onSetThresholds: (newThresholds: Threshold[]) => void\n yScale: Scale\n yDomain: number[]\n}\n\nconst ThresholdMarkers: FunctionComponent = ({\n yScale,\n yDomain,\n thresholds,\n onSetThresholds,\n}) => {\n const originRef = useRef(null)\n\n const nextZoomThreshold: {\n index?: number\n minValue?: number\n maxValue?: number\n } = {}\n\n const [zoomThreshold, setZoomThreshold] = useState(nextZoomThreshold)\n\n const zoomIn = () => {\n onSetThresholds(\n thresholds.map((t, i) => {\n if (zoomThreshold.index !== i) {\n return t\n }\n if (t.type === 'greater' || t.type === 'lesser') {\n return {...t, max: t.value}\n }\n if (t.type === 'range') {\n return {\n ...t,\n max: zoomThreshold.maxValue,\n min: zoomThreshold.minValue,\n }\n }\n })\n )\n }\n\n const debouncedZoomIn = debounce(zoomIn, ZOOM_IN_WAIT)\n\n const handleDrag = (index: number, field: string, y: number) => {\n nextZoomThreshold.index = index\n const yRelative = y - originRef.current.getBoundingClientRect().top\n const yValue = clamp(yScale.invert(yRelative), yDomain)\n\n const nextThreshold: Threshold = {\n ...thresholds[index],\n [field]: yValue,\n }\n\n if (\n nextThreshold.type === 'range' &&\n nextThreshold.min > nextThreshold.max\n ) {\n // If the user drags the min past the max or vice versa, we swap the\n // values that are set so that the min is always at most the max\n const maxValue = nextThreshold.min\n\n nextThreshold.min = nextThreshold.max\n nextThreshold.max = maxValue\n }\n\n const nextThresholds = thresholds.map((t, i) =>\n i === index ? nextThreshold : t\n )\n\n const roundedThresholds = nextThresholds.map(nt => {\n if (nt.type === 'greater' || nt.type === 'lesser') {\n return {\n ...nt,\n value: round(nt.value, DRAGGABLE_THRESHOLD_PRECISION),\n max: yDomain[1],\n }\n }\n\n if (nt.type === 'range') {\n if (field === 'maxValue') {\n nextZoomThreshold.maxValue = round(\n nt['maxValue'],\n DRAGGABLE_THRESHOLD_PRECISION\n )\n nextZoomThreshold.minValue = round(\n nt.min,\n DRAGGABLE_THRESHOLD_PRECISION\n )\n return {\n ...nt,\n max: round(yDomain[1], DRAGGABLE_THRESHOLD_PRECISION),\n min: round(nt.min, DRAGGABLE_THRESHOLD_PRECISION),\n }\n }\n nextZoomThreshold.maxValue = round(\n nt.max,\n DRAGGABLE_THRESHOLD_PRECISION\n )\n nextZoomThreshold.minValue = round(\n nt['minValue'],\n DRAGGABLE_THRESHOLD_PRECISION\n )\n return {\n ...nt,\n max: round(nt.max, DRAGGABLE_THRESHOLD_PRECISION),\n min: yDomain[0]\n ? round(yDomain[0], DRAGGABLE_THRESHOLD_PRECISION)\n : 0,\n }\n }\n })\n setZoomThreshold(nextZoomThreshold)\n onSetThresholds(roundedThresholds)\n }\n\n return (\n
\n {thresholds.map((threshold, index) => {\n const onChangePos = ({y}) => handleDrag(index, 'value', y)\n const onChangeMaxPos = ({y}) => handleDrag(index, 'maxValue', y)\n const onChangeMinPos = ({y}) => handleDrag(index, 'minValue', y)\n\n switch (threshold.type) {\n case 'greater':\n return (\n \n )\n case 'lesser':\n return (\n \n )\n case 'range':\n return (\n \n )\n default:\n throw new Error('Unknown threshold type in ')\n }\n })}\n
\n )\n}\n\nexport default ThresholdMarkers\n","// Libraries\nimport React, {useRef, useLayoutEffect, FunctionComponent} from 'react'\nimport {createPortal} from 'react-dom'\n\n// Constants\nimport {TOOLTIP_PORTAL_ID} from 'src/portals/TooltipPortal'\n\n// Types\nimport {ComponentColor} from '@influxdata/clockface'\n\ninterface Props {\n triggerRect: DOMRect\n children: JSX.Element\n maxWidth?: number\n color?: ComponentColor\n}\n\nconst BoxTooltip: FunctionComponent = ({\n triggerRect,\n children,\n maxWidth = 300,\n color = ComponentColor.Primary,\n}) => {\n const ref = useRef(null)\n\n // Position the tooltip after it has rendered, taking into account its size\n useLayoutEffect(() => {\n const el = ref.current\n\n if (!el || !triggerRect) {\n return\n }\n\n const rect = el.getBoundingClientRect()\n let left = Math.floor(triggerRect.left - rect.width) - 2\n // Hacky for #15518 (https://github.com/influxdata/influxdb/issues/15518)\n // Long term solution would be to have getBoundingClientRect output\n // to the left / ride side of the div based on boxtooltip location\n let caretClassName = 'left'\n\n // If the width of the tooltip causes it to overflow left\n // position it to the right of the trigger element\n if (left < 0) {\n left = triggerRect.left + triggerRect.width\n caretClassName = 'right'\n }\n\n // Attempt to position the vertical midpoint of tooltip next to the\n // vertical midpoint of the trigger rectangle\n let top = triggerRect.top + triggerRect.height / 2 - rect.height / 2\n\n // If the tooltip overflows the top of the screen, align the top of\n // the tooltip with the top of the screen\n if (top < 0) {\n top = 0\n }\n\n // If the tooltip overflows the bottom of the screen, align the bottom of\n // the tooltip with the bottom of the screen\n if (top + rect.height > window.innerHeight) {\n top = window.innerHeight - rect.height\n }\n\n el.setAttribute(\n 'style',\n `visibility: visible; top: ${top}px; left: ${left}px; max-width: ${maxWidth}px;`\n )\n\n // Position the caret (little arrow on the side of the tooltip) so that it\n // points to the vertical midpoint of the trigger rectangle\n const caretTop = triggerRect.top + triggerRect.height / 2 - top\n\n el.querySelector('.box-tooltip--caret').setAttribute(\n 'style',\n `top: ${caretTop}px;`\n )\n\n el.className = `box-tooltip box-tooltip__${color} ${caretClassName}`\n })\n\n return createPortal(\n \n {children}\n
\n
\n
\n
,\n document.querySelector(`#${TOOLTIP_PORTAL_ID}`)\n )\n}\n\nexport default BoxTooltip\n","// Libraries\nimport React, {FunctionComponent, Fragment, CSSProperties} from 'react'\n\n// Constants\nimport {LEVEL_COLORS} from 'src/alerting/constants'\n\ninterface EventsRow {\n time: string\n checkName: string\n level: string\n message: string\n}\n\ninterface Props {\n events: EventsRow[]\n}\n\nconst EventMarkerTooltip: FunctionComponent = ({events}) => {\n const columns = ['time', 'checkName', 'level', 'message']\n\n const calculateLevelStyle = (\n level: string,\n colorize: boolean\n ): CSSProperties => {\n if (!colorize) {\n return\n }\n\n const color = LEVEL_COLORS[`${level.toUpperCase()}`]\n return {color}\n }\n\n return (\n
\n
\n {columns.map(colName => (\n
\n
{colName}
\n {events.map((event, i) => {\n const {time, checkName, level} = event\n return (\n \n \n {event[colName]}\n
\n \n )\n })}\n
\n ))}\n
\n \n )\n}\n\nexport default EventMarkerTooltip\n","// Libraries\nimport React, {FC, useState, useRef} from 'react'\n\n// Utils\nimport {Scale} from '@influxdata/giraffe'\nimport {isInDomain} from 'src/shared/utils/vis'\n\n// Components\nimport BoxTooltip from './BoxTooltip'\n\n// Types\nimport {StatusRow, LowercaseCheckStatusLevel} from 'src/types'\nimport EventMarkerTooltip from './EventMarkerTooltip'\n\ninterface Props {\n events: StatusRow[]\n xScale: Scale\n xDomain: number[]\n xFormatter: (x: number) => string\n}\n\nconst findMaxLevel = (event: StatusRow[]) => {\n const levels: LowercaseCheckStatusLevel[] = [\n 'crit',\n 'warn',\n 'info',\n 'ok',\n 'unknown',\n ]\n const eventLevels = event.map(e => e.level)\n for (const l of levels) {\n if (eventLevels.includes(l)) {\n return l\n }\n }\n return 'unknown'\n}\n\nconst EventMarker: FC = ({xScale, xDomain, events, xFormatter}) => {\n const trigger = useRef(null)\n\n const [tooltipVisible, setTooltipVisible] = useState(false)\n let triggerRect: DOMRect = null\n\n if (trigger.current) {\n triggerRect = trigger.current.getBoundingClientRect()\n }\n\n const {time} = events[0]\n const x = Math.ceil(xScale(time))\n const style = {left: `${x}px`}\n\n const level = findMaxLevel(events)\n const markerClass = `event-marker--line__${level.toLowerCase()}`\n\n const formattedEvents = events.map(e => ({...e, time: xFormatter(e.time)}))\n\n return (\n isInDomain(time, xDomain) && (\n <>\n \n {\n setTooltipVisible(true)\n }}\n onMouseOut={() => {\n setTooltipVisible(false)\n }}\n />\n \n {tooltipVisible && trigger.current && (\n \n \n \n )}\n \n )\n )\n}\n\nexport default EventMarker\n","// Libraries\nimport React, {FunctionComponent, useState, useEffect} from 'react'\n\n// Components\nimport EventMarker from 'src/shared/components/EventMarker'\n\n// Types\nimport {Scale} from '@influxdata/giraffe'\nimport {StatusRow} from 'src/types'\nimport {IconFont, Icon} from '@influxdata/clockface'\nimport {LEVEL_COLORS} from 'src/alerting/constants'\n\ninterface Props {\n eventsArray: StatusRow[][]\n xScale: Scale\n xDomain: number[]\n xFormatter: (x: number) => string\n}\n\nconst filterEvents = (\n eventsArray: StatusRow[][],\n isOkVisible: boolean,\n isInfoVisible: boolean,\n isWarnVisible: boolean,\n isCritVisible: boolean,\n isUnknownVisible: boolean\n): StatusRow[][] => {\n return eventsArray\n .map(events => {\n return (\n events.length &&\n events.filter(e => {\n return (\n (e.level === 'ok' && isOkVisible) ||\n (e.level === 'info' && isInfoVisible) ||\n (e.level === 'warn' && isWarnVisible) ||\n (e.level === 'crit' && isCritVisible) ||\n (e.level === 'unknown' && isUnknownVisible)\n )\n })\n )\n })\n .filter(events => events && events.length)\n}\n\nconst EventMarkers: FunctionComponent = ({\n xScale,\n xDomain,\n eventsArray,\n xFormatter,\n}) => {\n const [isOkVisible, setOkVisibility] = useState(false)\n const [isInfoVisible, setInfoVisibility] = useState(true)\n const [isWarnVisible, setWarnVisibility] = useState(true)\n const [isCritVisible, setCritVisibility] = useState(true)\n const [isUnknownVisible, setUnknownVisibility] = useState(true)\n\n const [filteredEventsArray, setFilteredEventsArray] = useState(\n filterEvents(\n eventsArray,\n isOkVisible,\n isInfoVisible,\n isWarnVisible,\n isCritVisible,\n isUnknownVisible\n )\n )\n\n useEffect(() => {\n setFilteredEventsArray(\n filterEvents(\n eventsArray,\n isOkVisible,\n isInfoVisible,\n isWarnVisible,\n isCritVisible,\n isUnknownVisible\n )\n )\n }, [\n eventsArray,\n isOkVisible,\n isInfoVisible,\n isWarnVisible,\n isCritVisible,\n isUnknownVisible,\n ])\n\n const iconGlyph = (visible: boolean) => {\n return visible ? IconFont.EyeOpen : IconFont.EyeClosed\n }\n\n const eventVisToggle = (\n
\n Toggle markers:\n setOkVisibility(!isOkVisible)}\n data-testid=\"event-marker-vis-toggle-ok\"\n >\n \n \n setWarnVisibility(!isWarnVisible)}\n data-testid=\"event-marker-vis-toggle-warn\"\n >\n \n \n setInfoVisibility(!isInfoVisible)}\n data-testid=\"event-marker-vis-toggle-info\"\n >\n \n \n setCritVisibility(!isCritVisible)}\n data-testid=\"event-marker-vis-toggle-crit\"\n >\n \n \n setUnknownVisibility(!isUnknownVisible)}\n data-testid=\"event-marker-vis-toggle-unknown\"\n >\n \n \n
\n )\n\n return (\n <>\n
\n {filteredEventsArray.map((events, index) => {\n return (\n \n )\n })}\n
\n {eventVisToggle}\n \n )\n}\n\nexport default EventMarkers\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {Plot} from '@influxdata/giraffe'\nimport {flatMap} from 'lodash'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\nimport ThresholdMarkers from 'src/shared/components/ThresholdMarkers'\nimport EventMarkers from 'src/shared/components/EventMarkers'\n\n// Utils\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {filterNoisyColumns} from 'src/shared/utils/vis'\nimport {CheckContext} from 'src/checks/utils/context'\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {CheckViewProperties} from 'src/types'\nimport {useCheckYDomainWithState} from 'src/alerting/utils/vis'\n\n// Types\nimport {VisualizationProps} from 'src/visualization'\n\ninterface Props extends VisualizationProps {\n properties: CheckViewProperties\n}\n\nconst X_COLUMN = '_time'\nconst Y_COLUMN = '_value'\n\nconst CheckPlot: FC = ({properties, result}) => {\n const {statuses, thresholds, updateThresholds} = useContext(CheckContext)\n const {theme, timeZone} = useContext(AppSettingContext)\n\n const [yDomain, onSetYDomain, onResetYDomain] = useCheckYDomainWithState(\n result.table.getColumn(Y_COLUMN, 'number'),\n thresholds\n )\n\n const columnKeys = result.table.columnKeys\n const isValidView =\n columnKeys.includes(X_COLUMN) && columnKeys.includes(Y_COLUMN)\n\n if (!isValidView) {\n return \n }\n\n const groupKey = [...result.fluxGroupKeyUnion, 'result']\n\n const xFormatter = getFormatter(result.table.getColumnType(X_COLUMN), {\n timeZone,\n trimZeros: false,\n })\n\n const yFormatter = getFormatter(result.table.getColumnType(Y_COLUMN), {\n timeZone,\n trimZeros: false,\n })\n\n const legendColumns = filterNoisyColumns(\n [...groupKey, X_COLUMN, Y_COLUMN],\n result.table\n )\n\n const thresholdValues = flatMap(thresholds, (t: any) => [\n t.value,\n t.minValue,\n t.maxValue,\n ]).filter(t => t !== undefined)\n\n const yTicks = thresholdValues.length ? thresholdValues : null\n\n const colorHexes =\n properties.colors && properties.colors.length\n ? properties.colors.map(c => c.hex)\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n return (\n
\n (\n \n ),\n },\n {\n type: 'custom',\n render: ({xScale, xDomain}) => (\n \n ),\n },\n ],\n }}\n />\n
\n )\n}\n\nexport default CheckPlot\n","import icon from './icon'\nimport properties from './properties'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'check',\n name: 'Check',\n disabled: true,\n graphic: icon,\n component: view,\n initial: properties,\n })\n}\n","// Libraries\nimport React, {FC, useContext, useEffect, useMemo, useState} from 'react'\n\n// Contexts\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowContext} from 'src/flows/context/flow.current'\n\n// Utils\nimport {formatTimeRangeArguments} from 'src/timeMachine/apis/queryBuilder'\n\n// Types\nimport {FluxResult, RemoteDataState, PipeData} from 'src/types'\nimport {FromFluxResult} from '@influxdata/giraffe'\nimport {RunQueryResult} from 'src/shared/apis/query'\n\ninterface Tag {\n [tagName: string]: Set\n}\n\ninterface SchemaValues {\n fields: string[]\n tags: Tag\n type?: string\n}\n\ninterface Schema {\n [measurement: string]: SchemaValues\n}\n\nexport interface NormalizedTag {\n [tagName: string]: string[] | number[]\n}\n\ninterface NormalizedSchema {\n measurements: string[]\n fields: string[]\n tags: NormalizedTag[]\n}\n\ninterface SchemaContextType {\n loading: RemoteDataState\n measurements: string[]\n fields: string[]\n tags: NormalizedTag[]\n searchTerm: string\n setSearchTerm: (value: string) => void\n}\n\nconst DEFAULT_CONTEXT: SchemaContextType = {\n loading: RemoteDataState.NotStarted,\n measurements: [],\n fields: [],\n tags: [],\n searchTerm: '',\n setSearchTerm: (_: string) => {},\n}\n\nexport const SchemaContext =\n React.createContext(DEFAULT_CONTEXT)\n\nconst parsedResultToSchema = (parsed: FromFluxResult): unknown => {\n let ni, no\n const filtered = [\n /^_start$/,\n /^_stop$/,\n /^_time$/,\n /^_value/,\n /^_measurement$/,\n /^_field$/,\n /^table$/,\n /^result$/,\n ]\n if (!parsed) {\n return\n }\n\n const out = parsed.table as any\n const len = out.length\n const measurements = out.columns._measurement?.data\n const fields = out.columns._field?.data\n const columns = out.columnKeys.filter(key => {\n return filtered.reduce((acc, curr) => {\n return acc && !curr.test(key)\n }, true)\n })\n const colLen = columns.length\n const schema = {} as any\n\n for (ni = 0; ni < len; ni++) {\n if (!schema.hasOwnProperty(measurements[ni])) {\n schema[measurements[ni]] = {\n fields: new Set(),\n tags: {},\n }\n }\n\n schema[measurements[ni]].fields.add(fields[ni])\n\n for (no = 0; no < colLen; no++) {\n if (!out.columns[columns[no]].data[ni]) {\n continue\n }\n\n if (!schema[measurements[ni]].tags.hasOwnProperty(columns[no])) {\n schema[measurements[ni]].tags[columns[no]] = new Set()\n }\n schema[measurements[ni]].tags[columns[no]].add(\n out.columns[columns[no]].data[ni]\n )\n }\n }\n\n Object.entries(schema).forEach(([key, val]) => {\n schema[key].fields = Array.from((val as any).fields)\n })\n\n return schema\n}\n\nconst normalizeSchema = (\n schema: Schema,\n data: PipeData,\n searchTerm: string\n): NormalizedSchema => {\n const {measurements, fields, tags} = Object.entries(schema || {})\n .map(([measurement, values]) => ({\n measurement: measurement,\n fields: values.fields.filter(\n f =>\n (!!data.field && f === data.field) ||\n (!data.field && f.toLowerCase().includes(searchTerm.toLowerCase()))\n ),\n tags: Object.entries(values.tags)\n .filter(\n ([name, values]) =>\n !searchTerm ||\n Array.from(values).some(value =>\n `${('' + name).toLowerCase()} = ${(\n '' + value\n ).toLowerCase()}`.includes(searchTerm.toLowerCase())\n )\n )\n .map(([name, values]) => {\n // there is no filter\n if (!searchTerm) {\n return [name, values]\n }\n\n // there is a match on some of the values, only show the ones that match\n return [\n name,\n Array.from(values).filter(value =>\n `${('' + name).toLowerCase()} = ${(\n '' + value\n ).toLowerCase()}`.includes(searchTerm.toLowerCase())\n ),\n ]\n }),\n }))\n .filter(values => {\n if (data.measurement) {\n return values.measurement === data.measurement\n }\n\n if (data.field) {\n return values.fields.length\n }\n\n if (searchTerm) {\n return (\n `measurement = ${values.measurement.toLowerCase()}`.includes(\n searchTerm.toLowerCase()\n ) ||\n values.fields.length ||\n values.tags.length\n )\n }\n\n return true\n })\n .reduce(\n (acc, curr) => {\n if (\n `measurement = ${curr.measurement.toLowerCase()}`.includes(\n searchTerm.toLowerCase()\n )\n ) {\n acc.measurements[curr.measurement] = true\n }\n curr.fields.reduce((facc, fcurr) => {\n facc[fcurr] = true\n return facc\n }, acc.fields)\n curr.tags.reduce((tacc, [tag, values]) => {\n if (!tacc['' + tag]) {\n tacc['' + tag] = new Set()\n }\n\n Array.from(values).forEach(v => tacc['' + tag].add('' + v))\n\n return tacc\n }, acc.tags)\n return acc\n },\n {\n measurements: {},\n fields: {},\n tags: {},\n }\n )\n\n return {\n measurements: Object.keys(measurements),\n fields: Object.keys(fields),\n tags: Object.entries(tags).map(([tag, value]) => ({\n [tag]: Array.from(value as ArrayLike),\n })),\n }\n}\n\nexport const SchemaProvider: FC = React.memo(({children}) => {\n const {data} = useContext(PipeContext)\n const {flow} = useContext(FlowContext)\n const {query, getPanelQueries} = useContext(FlowQueryContext)\n const [searchTerm, setSearchTerm] = useState('')\n const [schema, setSchema] = useState({})\n const [loading, setLoading] = useState(RemoteDataState.NotStarted)\n\n const range = formatTimeRangeArguments(flow?.range)\n\n useEffect(() => {\n if (!data?.bucket) {\n return\n }\n\n setLoading(RemoteDataState.Loading)\n\n const scope = getPanelQueries(data.id)?.scope\n\n let source = `from(bucket: \"${data.bucket.name}\")`\n if (data.bucket.type === 'sample') {\n source = `import \"influxdata/influxdb/sample\"\n sample.data(set: \"${data.bucket.id}\")`\n }\n const text = `${source}\n |> range(${range})\n |> first()\n |> drop(columns: [\"_value\"])\n |> group()`\n\n query(text, scope)\n .then((response: FluxResult) => {\n const schemaForBucket = parsedResultToSchema(response.parsed)\n setSchema(schemaForBucket)\n setLoading(RemoteDataState.Done)\n })\n .catch((error: RunQueryResult) => {\n console.error('error: ', error)\n setLoading(RemoteDataState.Error)\n setSchema({})\n })\n }, [data?.bucket?.name, range]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const normalized = useMemo(\n () => normalizeSchema(schema, data, searchTerm),\n [data, schema, searchTerm]\n )\n\n return (\n \n {children}\n \n )\n})\n\nexport default SchemaProvider\n","// Libraries\nimport React, {FC, useContext, useCallback} from 'react'\n\n// Components\nimport {List, Gradients} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {SchemaContext} from 'src/flows/pipes/MetricSelector/context'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\ntype Props = {\n measurements: string[]\n}\n\nconst MeasurementSelectors: FC = ({measurements}) => {\n const {data, update} = useContext(PipeContext)\n const {setSearchTerm} = useContext(SchemaContext)\n const selectedMeasurement = data?.measurement\n const updateMeasurementSelection = useCallback(\n (measurement: string): void => {\n let updated = measurement\n if (updated === selectedMeasurement) {\n event('metric_selector_add_filter')\n event('Deselecting Measurement in Flow Query Builder')\n updated = ''\n } else {\n setSearchTerm('')\n event('metric_selector_remove_filter')\n event('Selecting Measurement in Flow Query Builder', {measurement})\n }\n\n update({measurement: updated})\n },\n [update, selectedMeasurement]\n )\n return (\n <>\n {measurements\n .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()))\n .map(measurement => (\n updateMeasurementSelection(measurement)}\n selected={measurement === selectedMeasurement}\n title={measurement}\n gradient={Gradients.GundamPilot}\n wrapText={true}\n testID={`measurement-selector ${measurement}`}\n >\n \n
\n {measurement}\n
\n
measurement
\n \n ))}\n \n )\n}\n\nexport default MeasurementSelectors\n","// Libraries\nimport React, {FC, useContext, useCallback} from 'react'\n\n// Components\nimport {List, Gradients} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {SchemaContext} from 'src/flows/pipes/MetricSelector/context'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\ntype Props = {\n fields: string[]\n}\n\nconst FieldSelectors: FC = ({fields}) => {\n const {data, update} = useContext(PipeContext)\n const {setSearchTerm} = useContext(SchemaContext)\n const selectedField = data?.field\n const updateFieldSelection = useCallback(\n (field: string): void => {\n let updated = field\n if (updated === selectedField) {\n event('metric_selector_add_filter')\n event('Deselecting Field in Flow Query Builder')\n updated = ''\n } else {\n setSearchTerm('')\n event('metric_selector_remove_filter')\n event('Selecting Field in Flow Query Builder', {field})\n }\n update({field: updated})\n },\n [update, selectedField]\n )\n\n return (\n <>\n {fields\n .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()))\n .map(field => (\n updateFieldSelection(field)}\n selected={field === selectedField}\n title={field}\n gradient={Gradients.GundamPilot}\n wrapText={true}\n testID={`field-selector ${field}`}\n >\n \n
\n {field}\n
\n
field
\n \n ))}\n \n )\n}\n\nexport default FieldSelectors\n","// Libraries\nimport React, {FC, MouseEvent, useContext, useCallback} from 'react'\n\n// Components\nimport {List, Gradients} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {NormalizedTag} from 'src/flows/pipes/MetricSelector/context'\n\n// Utils\nimport {event as reportEvent} from 'src/cloud/utils/reporting'\n\ntype Props = {\n tags: NormalizedTag[]\n}\n\nconst TagSelectors: FC = ({tags}) => {\n const {data, update} = useContext(PipeContext)\n const selectedTags = data?.tags\n\n const selectEventText = 'Selecting Tag in Flow Query Builder'\n const deselectEventText = 'Deselecting Tag in Flow Query Builder'\n\n const handleSublistMultiSelect = useCallback(\n (tagName: string, tagValue: string): void => {\n let tagValues = []\n if (!selectedTags[tagName]) {\n tagValues = [tagValue]\n } else if (\n selectedTags[tagName] &&\n selectedTags[tagName].includes(tagValue)\n ) {\n tagValues = selectedTags[tagName].filter(v => v !== tagValue)\n } else {\n tagValues = [...selectedTags[tagName], tagValue]\n }\n\n const updatedTags = {\n ...selectedTags,\n [tagName]: tagValues,\n }\n\n if (tagValues.length < selectedTags[tagName]?.length) {\n reportEvent('metric_selector_add_filter')\n reportEvent(deselectEventText, {\n type: 'multi-select',\n tags: JSON.stringify(updatedTags),\n })\n } else {\n reportEvent('metric_selector_remove_filter')\n reportEvent(selectEventText, {\n type: 'multi-select',\n tags: JSON.stringify(updatedTags),\n })\n }\n update({\n tags: updatedTags,\n })\n },\n [update]\n )\n\n const handleSubListItemClick = useCallback(\n (event: MouseEvent, tagName: string, tagValue: string) => {\n if (event.metaKey || event.ctrlKey) {\n handleSublistMultiSelect(tagName, tagValue)\n return\n }\n let updatedValue = [tagValue]\n let updatedTags = {\n [tagName]: updatedValue,\n }\n if (selectedTags[tagName]?.includes(tagValue)) {\n updatedValue = []\n updatedTags[tagName] = updatedValue\n }\n if (tagName in selectedTags && updatedValue.length === 0) {\n reportEvent(deselectEventText, {\n type: 'single-select',\n })\n updatedTags = {}\n } else {\n reportEvent(selectEventText, {\n type: 'single-select',\n tags: JSON.stringify(updatedTags),\n })\n }\n update({\n tags: updatedTags,\n })\n },\n [update]\n )\n\n const _tags = tags.reduce((acc, tag) => {\n const byTag = Object.entries(tag).reduce((tacc, tcurr) => {\n const name = tcurr[0]\n const values = tcurr[1] as string[]\n\n const items = values.map(val => (\n {\n handleSubListItemClick(event as MouseEvent, name, value)\n }}\n selected={selectedTags[name]?.includes(val)}\n title={val}\n gradient={Gradients.GundamPilot}\n wrapText={true}\n testID={`tag-selector ${val}`}\n >\n \n
{`${name} = ${val}`}
\n
tag
\n \n ))\n\n return tacc.concat(items)\n }, [])\n\n return acc.concat(byTag)\n }, [])\n\n return <>{_tags}\n}\n\nexport default TagSelectors\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {InfluxColors, List, EmptyState} from '@influxdata/clockface'\nimport MeasurementSelectors from 'src/flows/pipes/MetricSelector/MeasurementSelectors'\nimport FieldSelectors from 'src/flows/pipes/MetricSelector/FieldSelectors'\nimport TagSelectors from 'src/flows/pipes/MetricSelector/TagSelectors'\nimport {SchemaContext} from 'src/flows/pipes/MetricSelector/context'\n\nconst Selectors: FC = () => {\n const {fields, measurements, tags, searchTerm} = useContext(SchemaContext)\n\n const noResults = !fields.length && !measurements.length && !tags.length\n\n let list = (\n \n \n \n \n \n )\n\n if (noResults && searchTerm) {\n list = (\n \n

{`No fields, measurements, or tags match \"${searchTerm}\"`}

\n
\n )\n } else if (noResults && !searchTerm) {\n list = (\n \n
No tags found in the selected time range
\n

Try selecting a different time range

\n
\n )\n }\n\n return
{list}
\n}\n\nexport default Selectors\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {\n TechnoSpinner,\n ComponentSize,\n RemoteDataState,\n} from '@influxdata/clockface'\nimport Selectors from 'src/flows/pipes/MetricSelector/Selectors'\nimport {SchemaContext} from 'src/flows/pipes/MetricSelector/context'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst FieldsList: FC = () => {\n const {data} = useContext(PipeContext)\n const {loading} = useContext(SchemaContext)\n\n if (!data.bucket) {\n return (\n
\n

Select a bucket first

\n
\n )\n }\n\n if (\n loading === RemoteDataState.NotStarted ||\n loading === RemoteDataState.Loading\n ) {\n return (\n
\n \n
\n )\n }\n\n if (loading === RemoteDataState.Error) {\n return (\n
\n

Could not fetch schema

\n
\n )\n }\n\n if (loading === RemoteDataState.Done) {\n return \n }\n\n return null\n}\n\nexport default FieldsList\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {Label as LabelComponent} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\nconst constructFilters = (value: string, type: string) => {\n if (!value) {\n return null\n }\n switch (type) {\n case 'measurement': {\n return {\n id: value,\n name: `measurement = ${value}`,\n properties: {\n color: 'hotpink',\n description: '',\n },\n type,\n }\n }\n case 'field': {\n return {\n id: value,\n name: `field = ${value}`,\n properties: {\n color: 'lightskyblue',\n description: '',\n },\n type,\n }\n }\n case 'tags': {\n const tagNames = Object.keys(value)\n if (tagNames) {\n const tags = []\n tagNames\n .filter(tagName => !!value[tagName])\n .forEach(tagName => {\n const tagValues = value[tagName]\n const mappedTags = tagValues.map(tagValue => ({\n id: tagValue,\n name: `${tagName} = ${tagValue}`,\n properties: {\n color: 'limegreen',\n description: '',\n },\n type,\n }))\n tags.push(...mappedTags)\n })\n return tags\n }\n return null\n }\n default: {\n return null\n }\n }\n}\n\ninterface SelectedTags {\n [key: string]: string[]\n}\n\nconst FilterTags: FC = () => {\n const {data, update} = useContext(PipeContext)\n const handleDeleteFilter = (type: string, name: string) => {\n event('Deleting the Filter Label in Flow Query Builder', {type})\n if (type === 'tags') {\n const [tagName, tagValue] = name.split(' = ')\n const selectedTags = (data?.tags || {}) as SelectedTags\n\n update({\n tags: Object.entries(selectedTags).reduce((acc, [key, value]) => {\n if (key !== tagName) {\n acc[key] = value\n return acc\n }\n\n acc[key] = value.filter(tag => tag !== tagValue)\n\n if (!acc[key].length) {\n delete acc[key]\n }\n\n return acc\n }, {}),\n })\n } else {\n update({[type]: ''})\n }\n }\n const currentFilters = () => {\n const measurement = constructFilters(data.measurement, 'measurement')\n let filters = []\n if (measurement) {\n filters = filters.concat(measurement)\n }\n const field = constructFilters(data.field, 'field')\n if (field) {\n filters = filters.concat(field)\n }\n const tags = constructFilters(data.tags, 'tags')\n if (tags) {\n filters = filters.concat(tags)\n }\n if (filters.length) {\n return filters.map(_filter => {\n const f = {..._filter}\n\n return (\n handleDeleteFilter(f.type, f.name)}\n />\n )\n })\n }\n return \n }\n return (\n
\n

Filters:

\n
{currentFilters()}
\n
\n )\n}\n\nexport default FilterTags\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {Input, IconFont, ComponentSize} from '@influxdata/clockface'\n\n// Contexts\nimport {SchemaContext} from 'src/flows/pipes/MetricSelector/context'\n\nconst SearchBar: FC = () => {\n const {searchTerm, setSearchTerm} = useContext(SchemaContext)\n\n const handleSetSearch = (text: string): void => {\n setSearchTerm(text)\n }\n\n return (\n handleSetSearch(evt.target.value)}\n />\n )\n}\n\nexport default SearchBar\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\nimport {Bucket} from 'src/types'\n\n// Contexts\nimport {BucketProvider} from 'src/shared/contexts/buckets'\nimport {SchemaProvider} from 'src/flows/pipes/MetricSelector/context'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Components\nimport BucketSelector from 'src/flows/shared/BucketSelector'\nimport FieldsList from 'src/flows/pipes/MetricSelector/FieldsList'\nimport FilterTags from 'src/flows/pipes/MetricSelector/FilterTags'\nimport SearchBar from 'src/flows/pipes/MetricSelector/SearchBar'\nimport {PIPE_DEFINITIONS} from 'src/flows'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\nconst DataSource: FC = ({Context}) => {\n const {data, update, scope} = useContext(PipeContext)\n\n const updateBucket = (bucket: Bucket) => {\n if (bucket?.id === data.bucket?.id) {\n return\n }\n event('Updated Bucket', {context: 'metric selector'})\n update({\n bucket,\n ...PIPE_DEFINITIONS['metricSelector'].initial,\n })\n }\n\n return (\n \n \n \n
\n
\n
\n \n
\n \n
\n \n \n
\n
\n
\n
\n )\n}\n\nexport default DataSource\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {ComponentStatus, Dropdown, IconFont} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\n// Contexts\nimport {SchemaProvider} from 'src/flows/pipes/MetricSelector/context'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Components\nimport FilterTags from 'src/flows/pipes/MetricSelector/FilterTags'\n\nconst DataSource: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n \n
\n
\n
\n (\n \n {data?.bucket?.name ?? 'No Bucket Selected'}\n \n )}\n menu={onCollapse => }\n style={{width: '250px', flex: '0 0 250px'}}\n />\n
\n \n
\n
\n
\n
\n )\n}\n\nexport default DataSource\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport ReadOnly from './readOnly'\nimport './style.scss'\nimport {FUNCTIONS} from 'src/timeMachine/constants/queryBuilder'\n\nexport default register => {\n register({\n type: 'metricSelector',\n family: 'inputs',\n priority: 1,\n component: View,\n readOnlyComponent: ReadOnly,\n button: 'Metric Selector',\n // featureFlag: 'flow-panel--metric-selector',\n initial: {\n field: '',\n measurement: '',\n tags: {},\n aggregateFunction: FUNCTIONS[0],\n },\n source: data => {\n const {bucket, field, measurement, tags} = data\n\n if (!bucket) {\n return ''\n }\n if (!(field || measurement || Object.values(tags).length)) {\n return ''\n }\n\n let from = `from(bucket: \"${bucket.name}\")`\n if (bucket.type === 'sample') {\n from = `import \"influxdata/influxdb/sample\"\n sample.data(set: \"${bucket.id}\")`\n }\n\n let text = `${from}\\n\\t|> range(start: v.timeRangeStart, stop: v.timeRangeStop)`\n if (measurement) {\n text += ` |> filter(fn: (r) => r[\"_measurement\"] == \"${measurement}\")`\n }\n if (field) {\n text += ` |> filter(fn: (r) => r[\"_field\"] == \"${field}\")`\n }\n if (tags && Object.keys(tags)?.length > 0) {\n Object.keys(tags)\n .filter((tagName: string) => !!tags[tagName])\n .forEach((tagName: string) => {\n const tagValues = tags[tagName]\n if (tagValues.length === 1) {\n text += ` |> filter(fn: (r) => r[\"${tagName}\"] == \"${tagValues[0]}\")`\n } else {\n tagValues.forEach((val, i) => {\n if (i === 0) {\n text += ` |> filter(fn: (r) => r[\"${tagName}\"] == \"${val}\"`\n }\n if (tagValues.length - 1 === i) {\n text += ` or r[\"${tagName}\"] == \"${val}\")`\n } else {\n text += ` or r[\"${tagName}\"] == \"${val}\"`\n }\n })\n }\n })\n }\n\n return text\n },\n })\n}\n","// Libraries\nimport React, {FC, createContext, useContext, useState} from 'react'\n\n// Contexts\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {BucketContext} from 'src/shared/contexts/buckets'\n\n// Utils\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {formatTimeRangeArguments} from 'src/timeMachine/apis/queryBuilder'\n\n// Types\nimport {\n RemoteDataState,\n BuilderTagsType,\n BuilderAggregateFunctionType,\n} from 'src/types'\n\n// Constants\nimport {\n CACHING_REQUIRED_END_DATE,\n CACHING_REQUIRED_START_DATE,\n} from 'src/utils/datetime/constants'\nimport {DEFAULT_LIMIT} from 'src/shared/constants/queryBuilder'\n\ninterface APIResultArray {\n selected: T[]\n results: T[]\n loading: RemoteDataState\n}\n\ninterface QueryBuilderCard {\n keys: APIResultArray\n values: APIResultArray\n aggregateFunctionType: BuilderAggregateFunctionType\n}\n\ninterface QueryBuilderMeta {\n keys: string[]\n values: string[]\n loadingKeys: RemoteDataState\n loadingValues: RemoteDataState\n}\n\nconst getDefaultCard = (): QueryBuilderCard => ({\n keys: {\n selected: [],\n results: [],\n loading: RemoteDataState.NotStarted,\n },\n values: {\n selected: [],\n results: [],\n loading: RemoteDataState.NotStarted,\n },\n aggregateFunctionType: 'filter',\n})\n\ninterface QueryBuilderContextType {\n cards: QueryBuilderCard[]\n\n selectBucket: (bucket?: string) => void\n selectMeasurement: (measurement?: string) => void\n\n add: () => void\n cancelKey: (idx: number) => void\n cancelValue: (idx: number) => void\n remove: (idx: number) => void\n update: (idx: number, card: Partial) => void\n loadKeys: (idx: number, search?: string) => void | Promise\n loadValues: (idx: number, search?: string) => void | Promise\n}\n\nexport const DEFAULT_CONTEXT: QueryBuilderContextType = {\n cards: [getDefaultCard()],\n\n selectBucket: _ => {},\n selectMeasurement: _ => {},\n\n add: () => {},\n cancelKey: (_idx: number) => {},\n cancelValue: (_idx: number) => {},\n remove: (_idx: number) => {},\n update: (_idx: number, _card: QueryBuilderCard) => {},\n loadKeys: (_idx: number, _search?: string) => {},\n loadValues: (_idx: number, _search?: string) => {},\n}\n\nexport const QueryBuilderContext =\n createContext(DEFAULT_CONTEXT)\n\nconst toBuilderConfig = (card: QueryBuilderCard): BuilderTagsType => ({\n key: (card.keys.selected || [])[0],\n values: (card.values.selected || []).slice(0),\n aggregateFunctionType: card.aggregateFunctionType,\n})\n\nconst fromBuilderConfig = (\n tag: BuilderTagsType,\n meta?: QueryBuilderMeta\n): QueryBuilderCard => {\n const out = getDefaultCard()\n\n out.keys.selected = [tag.key]\n out.keys.results = meta?.keys ?? []\n out.keys.loading = meta?.loadingKeys ?? RemoteDataState.NotStarted\n out.values.selected = [...tag.values]\n out.values.results = meta?.values ?? []\n out.values.loading = meta?.loadingValues ?? RemoteDataState.NotStarted\n out.aggregateFunctionType = tag.aggregateFunctionType\n\n return out\n}\n\nexport const QueryBuilderProvider: FC = ({children}) => {\n const {id, data, range, update} = useContext(PipeContext)\n const {query, getPanelQueries} = useContext(FlowQueryContext)\n const {buckets} = useContext(BucketContext)\n const [cancelKey, setCancelKey] = useState({})\n const [cancelValue, setCancelValue] = useState({})\n\n const [cardMeta, setCardMeta] = useState(\n Array(data.tags.length).fill({\n keys: [],\n values: [],\n loadingKeys: RemoteDataState.NotStarted,\n loadingValues: RemoteDataState.NotStarted,\n })\n )\n\n const selectBucket = (bucket?: string) => {\n const card = getDefaultCard()\n\n if (!bucket || bucket === data?.buckets[0]?.name) {\n update({buckets: [], tags: [card].map(toBuilderConfig)})\n } else {\n card.keys.selected = ['_measurement']\n update({\n buckets: [buckets.find(b => b.name === bucket)],\n tags: [card].map(toBuilderConfig),\n })\n }\n\n setCardMeta([\n {\n keys: [],\n values: [],\n loadingKeys: RemoteDataState.NotStarted,\n loadingValues: RemoteDataState.NotStarted,\n },\n ])\n }\n\n const selectMeasurement = (measurement?: string) => {\n if (measurement) {\n update({\n tags: [\n {\n ...data.tags[0],\n values: [measurement],\n },\n toBuilderConfig(getDefaultCard()),\n ],\n })\n\n setCardMeta([\n cardMeta[0],\n {\n keys: [],\n values: [],\n loadingKeys: RemoteDataState.NotStarted,\n loadingValues: RemoteDataState.NotStarted,\n },\n ])\n } else {\n update({\n tags: [\n {\n ...data.tags[0],\n values: [],\n },\n ],\n })\n\n setCardMeta([cardMeta[0]])\n }\n }\n\n const cards = data.tags.map((tag, idx) =>\n fromBuilderConfig(tag, cardMeta[idx])\n )\n\n const add = () => {\n cards.push(getDefaultCard())\n\n setCardMeta([\n ...cardMeta,\n {\n keys: [],\n values: [],\n loadingKeys: RemoteDataState.NotStarted,\n loadingValues: RemoteDataState.NotStarted,\n },\n ])\n\n update({tags: cards.map(toBuilderConfig)})\n }\n\n const loadKeys = (idx, search) => {\n if (\n !data.buckets[0] ||\n typeof data.buckets[0] === 'string' ||\n !cards[idx]\n ) {\n return\n }\n\n if (!cardMeta[idx]) {\n return\n }\n\n if (cardMeta[idx].loadingKeys === RemoteDataState.Loading) {\n return\n }\n\n cardMeta.splice(idx, 1, {\n ...cardMeta[idx],\n loadingKeys: RemoteDataState.Loading,\n })\n setCardMeta([...cardMeta])\n\n const tagSelections = cards\n .filter(card => card.keys.selected[0] && card.values.selected.length)\n .map(card => {\n const fluxTags = card.values.selected\n .map(\n value =>\n `r[\"${card.keys.selected[0]}\"] == \"${value.replace(\n /\\\\/g,\n '\\\\\\\\'\n )}\"`\n )\n .join(' or ')\n\n return `(${fluxTags})`\n })\n const tagString = tagSelections.length\n ? tagSelections.join(' and ')\n : 'true'\n const searchString = search\n ? `\\n |> filter(fn: (r) => r._value =~ regexp.compile(v: \"(?i:\" + regexp.quoteMeta(v: \"${search}\") + \")\"))`\n : ''\n const previousTagSelections = cards\n .slice(0, idx)\n .map(card => `r._value != \"${card.keys.selected[0]}\"`)\n const previousTagString = previousTagSelections.length\n ? `\\n |> filter(fn: (r) => ${previousTagSelections.join(' and ')})`\n : ''\n\n const {scope} = getPanelQueries(id)\n\n let _source = 'import \"regexp\"\\n'\n if (data.buckets[0].type === 'sample') {\n _source += `import \"influxdata/influxdb/sample\"\\nsample.data(set: \"${data.buckets[0].id}\")`\n } else {\n _source += `from(bucket: \"${data.buckets[0].name}\")`\n }\n\n let queryText = `${_source}\n |> range(${formatTimeRangeArguments(range)})\n |> filter(fn: (r) => ${tagString})\n |> keys()\n |> keep(columns: [\"_value\"])\n |> distinct()${searchString}${previousTagString}\n |> filter(fn: (r) => r._value != \"_time\" and r._value != \"_start\" and r._value != \"_stop\" and r._value != \"_value\")\n |> sort()\n |> limit(n: ${DEFAULT_LIMIT})`\n\n if (data.buckets[0].type !== 'sample' && isFlagEnabled('newQueryBuilder')) {\n _source = `import \"regexp\"\n import \"influxdata/influxdb/schema\"`\n queryText = `${_source}\n schema.tagKeys(\n bucket: \"${data.buckets[0].name}\",\n predicate: (r) => ${tagString},\n start: ${CACHING_REQUIRED_START_DATE},\n stop: ${CACHING_REQUIRED_END_DATE},\n )${searchString}${previousTagString}\n |> filter(fn: (r) => r._value != \"_time\" and r._value != \"_start\" and r._value != \"_stop\" and r._value != \"_value\")\n |> sort()\n |> limit(n: ${DEFAULT_LIMIT})`\n }\n\n const result = query(queryText, scope)\n\n setCancelKey(prev => ({\n ...prev,\n [idx]: (result as any).cancel,\n }))\n\n return result\n .then(resp => {\n return (Object.values(resp.parsed.table.columns).filter(\n c => c.name === '_value' && c.type === 'string'\n )[0]?.data ?? []) as string[]\n })\n .then(keys => {\n const currentCards = data.tags.map(fromBuilderConfig)\n if (!currentCards[idx].keys.selected[0]) {\n if (idx === 0 && keys.includes('_measurement')) {\n currentCards[idx].keys.selected = ['_measurement']\n } else {\n currentCards[idx].keys.selected = [keys[0]]\n }\n\n update({tags: currentCards.map(toBuilderConfig)})\n } else if (!keys.includes(currentCards[idx].keys.selected[0])) {\n keys.unshift(currentCards[idx].keys.selected[0])\n }\n\n cardMeta.splice(idx, 1, {\n keys,\n values: [],\n loadingKeys: RemoteDataState.Done,\n loadingValues: RemoteDataState.NotStarted,\n })\n setCardMeta([...cardMeta])\n })\n .catch(e => {\n console.error(e)\n })\n }\n\n const handleCancelKey = idx => {\n if (idx in cancelKey) {\n cancelKey[idx]()\n }\n }\n\n const handleCancelValue = idx => {\n if (idx in cancelValue) {\n cancelValue[idx]()\n }\n }\n\n const loadValues = (idx, search) => {\n if (\n cardMeta[idx].loadingValues === RemoteDataState.Loading ||\n !data.buckets.length\n ) {\n return\n }\n\n cardMeta.splice(idx, 1, {\n ...cardMeta[idx],\n loadingValues: RemoteDataState.Loading,\n })\n\n setCardMeta([...cardMeta])\n\n const tagSelections = cards\n .slice(0, idx)\n .filter(card => card.keys.selected[0] && card.values.selected.length)\n .map(card => {\n const fluxTags = card.values.selected\n .map(\n value =>\n `r[\"${card.keys.selected[0]}\"] == \"${value.replace(\n /\\\\/g,\n '\\\\\\\\'\n )}\"`\n )\n .join(' or ')\n\n return `(${fluxTags})`\n })\n const tagString = tagSelections.length\n ? tagSelections.join(' and ')\n : 'true'\n const searchString = search\n ? `\\n |> filter(fn: (r) => r._value =~ regexp.compile(v: \"(?i:\" + regexp.quoteMeta(v: \"${search}\") + \")\"))`\n : ''\n\n const {scope} = getPanelQueries(id)\n let _source = 'import \"regexp\"\\n'\n if (data.buckets[0].type === 'sample') {\n _source += `import \"influxdata/influxdb/sample\"\\nsample.data(set: \"${data.buckets[0].id}\")`\n } else {\n _source += `from(bucket: \"${data.buckets[0].name}\")`\n }\n\n let queryText = `${_source}\n |> range(${formatTimeRangeArguments(range)})\n |> filter(fn: (r) => ${tagString})\n |> keep(columns: [\"${cards[idx].keys.selected[0]}\"])\n |> group()\n |> distinct(column: \"${cards[idx].keys.selected[0]}\")${searchString}\n |> limit(n: ${DEFAULT_LIMIT})\n |> sort()`\n\n if (data.buckets[0].type !== 'sample' && isFlagEnabled('newQueryBuilder')) {\n _source = `import \"regexp\"\n import \"influxdata/influxdb/schema\"`\n queryText = `${_source}\n schema.tagValues(\n bucket: \"${data.buckets[0].name}\",\n tag: \"${cards[idx].keys.selected[0]}\",\n predicate: (r) => ${tagString},\n start: ${CACHING_REQUIRED_START_DATE},\n stop: ${CACHING_REQUIRED_END_DATE},\n )${searchString}\n |> limit(n: ${DEFAULT_LIMIT})\n |> sort()`\n }\n\n const result = query(queryText, scope)\n\n setCancelValue(prev => ({\n ...prev,\n [idx]: (result as any).cancel,\n }))\n\n return result\n .then(resp => {\n return (Object.values(resp.parsed.table.columns).filter(\n c => c.name === '_value' && c.type === 'string'\n )[0]?.data ?? []) as string[]\n })\n .then(values => {\n cardMeta.splice(idx, 1, {\n ...cardMeta[idx],\n values,\n loadingValues: RemoteDataState.Done,\n })\n setCardMeta([...cardMeta])\n })\n .catch(e => {\n console.error(e)\n })\n }\n\n const remove = (idx: number): void => {\n if (idx === 0 || idx > cards.length) {\n return\n }\n\n cards.splice(idx, 1)\n cardMeta.splice(idx, 1)\n\n setCardMeta(\n cardMeta.map((meta, i) => {\n if (i < idx) {\n return meta\n }\n\n return {\n keys: [],\n values: [],\n loadingKeys: RemoteDataState.NotStarted,\n loadingValues: RemoteDataState.NotStarted,\n }\n })\n )\n\n update({tags: cards.map(toBuilderConfig)})\n }\n\n const updater = (idx: number, card: Partial): void => {\n if (idx < 0 || idx > data.tags.length) {\n return\n }\n\n const _card = {\n ...cards[idx],\n ...card,\n\n keys: {\n ...cards[idx].keys,\n ...(card.keys || {}),\n },\n values: {\n ...cards[idx].values,\n ...(card.values || {}),\n },\n }\n\n if (_card.keys?.selected[0] !== cards[idx]?.keys?.selected[0]) {\n cardMeta.splice(idx, 1, {\n ...cardMeta[idx],\n values: [],\n loadingValues: RemoteDataState.NotStarted,\n })\n setCardMeta([...cardMeta])\n }\n\n cards[idx] = {\n ...cards[idx],\n ..._card,\n }\n\n data.tags = cards.map(toBuilderConfig)\n\n update({tags: data.tags})\n }\n\n return (\n \n {children}\n \n )\n}\n","// Libraries\nimport React, {FC, useContext, useCallback} from 'react'\nimport {SquareButton, IconFont} from '@influxdata/clockface'\nimport {RemoteDataState} from 'src/types'\n\nimport {QueryBuilderContext} from 'src/flows/pipes/QueryBuilder/context'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nimport {event} from 'src/cloud/utils/reporting'\n\nconst AddButton: FC = () => {\n const {cards, add} = useContext(QueryBuilderContext)\n\n const onClick = useCallback(() => {\n event('Query Builder Card Added')\n add()\n }, [add])\n\n if (!cards.length) {\n return null\n }\n\n if (\n isFlagEnabled('newQueryBuilder') &&\n !cards[0]?.values?.selected?.length &&\n cards.length < 2\n ) {\n return null\n }\n\n const {keys} = cards[cards.length - 1]\n if (keys.results.length === 0 && keys.loading === RemoteDataState.Done) {\n return null\n }\n\n return (\n \n )\n}\n\nexport default AddButton\n","import React, {useState, FC, useRef} from 'react'\n\ninterface Props {\n filename?: string\n error?: string\n\n allowedExtensions: string[]\n\n handleFileUpload: (file?: File, contents?: string) => void\n}\n\nexport const MiniFileDnd: FC = ({\n filename,\n error,\n\n allowedExtensions,\n\n handleFileUpload,\n}) => {\n const [dropAreaActive, setDropAreaActive] = useState(false)\n\n function dragOverHandler(ev) {\n setDropAreaActive(true)\n\n // Prevent default behavior (Prevent file from being opened)\n ev.preventDefault()\n }\n\n function dragLeaveHandler(ev) {\n setDropAreaActive(false)\n ev.preventDefault()\n }\n\n const handleFileClick = (event: any): void => {\n const file: File = event.currentTarget.files[0]\n\n if (!file) {\n return\n }\n\n const reader = new FileReader()\n reader.readAsText(file)\n reader.onload = () => {\n handleFileUpload(file, reader.result as string)\n }\n }\n\n const dropHandler = (event: any): void => {\n const file = event.dataTransfer.files[0]\n\n if (!file) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n const reader = new FileReader()\n reader.readAsText(file)\n reader.onload = () => {\n handleFileUpload(file, reader.result as string)\n }\n\n setDropAreaActive(false)\n }\n\n const inputEl = useRef(null)\n\n const inputElement = (\n \n )\n\n // it gets clicked programmatically since the input itself has display='none'\n const handleFileOpen = (): void => {\n inputEl.current.click()\n }\n\n const displayText = filename ?? 'Add schema file'\n\n const dropZoneClasses = [\n ['dnd', true],\n ['active', dropAreaActive],\n ['hasError', error],\n ]\n .filter(c => !!c[1])\n .map(c => `${c[0]}`)\n .join(' ')\n\n const displayAreaClasses = [\n ['display-area', true],\n ['active', dropAreaActive],\n ]\n .filter(c => !!c[1])\n .map(c => `${c[0]}`)\n .join(' ')\n\n return (\n
\n \n
\n {displayText}\n
\n {inputElement}\n
\n \n )\n}\n","import React, {FC, useState} from 'react'\nimport {parse} from 'papaparse'\nimport {\n AlignItems,\n ComponentSize,\n ComponentColor,\n Panel,\n FormElementError,\n FlexBox,\n FlexDirection,\n Input,\n InputType,\n DismissButton,\n} from '@influxdata/clockface'\nimport {MiniFileDnd} from 'src/flows/pipes/QueryBuilder/MiniFileDnd'\n\ninterface ExplicitProps {\n schema: any\n onUpdate: (schema: any) => void\n onDelete: () => void\n}\n\nconst ALLOWED_TYPES = ['application/json', 'text/csv']\nconst ALLOWED_EXTENSIONS = ['.json', '.csv']\nconst DATA_TYPE_STRINGS = ['integer', 'float', 'boolean', 'string', 'unsigned']\n\nconst validSchemaName = (name = '') => {\n const _name = name.trim()\n if (/^[0-9_]/.test(_name)) {\n return \"cannot start with '_' or a number\"\n }\n if (_name.length > 128) {\n return 'too long, max length is 128 characters'\n }\n\n return null\n}\n\nconst ExplicitPanel: FC = ({schema, onUpdate, onDelete}) => {\n const [fileErrorMessage, setFileErrorMessage] = useState('')\n const valid = _schema => {\n return !!_schema.columns && !!_schema.name && !validSchemaName(_schema.name)\n }\n\n const handleNameUpdate = evt => {\n const update = {\n ...schema,\n name: evt.target.value,\n }\n\n onUpdate({\n ...update,\n valid: valid(update),\n })\n }\n\n const handleFileUpload = (file: File, contents: string) => {\n try {\n if (!ALLOWED_TYPES.includes(file.type)) {\n throw new Error(`Unsupported file type: ${file.type}`)\n }\n\n let columns\n if (file.type === 'text/csv') {\n columns = parse(contents, {header: true}).data.map(c => {\n if (!c.dataType) {\n delete c.dataType\n }\n return c\n })\n } else if (file.type === 'application/json') {\n columns = JSON.parse(contents)\n }\n\n if (!Array.isArray(columns)) {\n throw new Error('Column file is not formatted correctly')\n }\n\n columns.forEach(col => {\n if (typeof col.name !== 'string') {\n throw new Error('All columns require a name field')\n }\n if (typeof col.type !== 'string') {\n throw new Error('All columns require a type field')\n }\n\n if ('dataType' in col) {\n if (!DATA_TYPE_STRINGS.includes(col.dataType)) {\n throw new Error('All columns require a valid dataType')\n }\n } else if (col.type === 'field') {\n throw new Error('Invalid column: type == field')\n }\n })\n\n const update = {\n ...schema,\n columns: columns,\n filename: file.name,\n }\n\n setFileErrorMessage(null)\n onUpdate({\n ...update,\n valid: valid(update),\n })\n } catch (e) {\n setFileErrorMessage(e.message)\n onUpdate({\n ...schema,\n columns: [],\n filename: file.name,\n valid: false,\n })\n }\n }\n\n const nameErrorMessage = validSchemaName(schema.name)\n\n return (\n \n \n
name
\n \n \n \n {!!nameErrorMessage && (\n \n )}\n \n \n \n {!!fileErrorMessage && (\n \n )}\n onDelete()}\n size={ComponentSize.ExtraSmall}\n color={ComponentColor.Default}\n />\n \n
\n )\n}\n\nexport default ExplicitPanel\n","import React, {FC, useState, ChangeEvent} from 'react'\nimport {\n SelectGroup,\n ButtonShape,\n Form,\n FlexBox,\n FlexDirection,\n Input,\n InputToggleType,\n InputLabel,\n Toggle,\n Button,\n Accordion,\n Overlay,\n ComponentColor,\n ComponentStatus,\n ComponentSize,\n AlignItems,\n ButtonType,\n} from '@influxdata/clockface'\nimport {ExtendedBucket} from 'src/shared/contexts/buckets'\nimport {CLOUD} from 'src/shared/constants'\nimport DurationSelector, {\n DurationOption,\n} from 'src/shared/components/DurationSelector'\n\nimport {parseDuration, durationToMilliseconds} from 'src/shared/utils/duration'\nimport ExplicitPanel from 'src/flows/pipes/QueryBuilder/ExplicitPanel'\n\ninterface Props {\n onCreate: (bucket: ExtendedBucket) => void\n onCancel: () => void\n}\n\nexport const DURATION_OPTIONS: DurationOption[] = [\n {duration: '1h', displayText: '1 hour'},\n {duration: '6h', displayText: '6 hours'},\n {duration: '12h', displayText: '12 hours'},\n {duration: '24h', displayText: '24 hours'},\n {duration: '48h', displayText: '48 hours'},\n {duration: '72h', displayText: '72 hours'},\n {duration: '7d', displayText: '7 days'},\n {duration: '14d', displayText: '14 days'},\n {duration: '30d', displayText: '30 days'},\n {duration: '90d', displayText: '90 days'},\n {duration: '1y', displayText: '1 year'},\n]\n\nconst validateName = (input: string): string => {\n const _input = input.trim()\n\n if (!_input) {\n return 'This bucket needs a name'\n }\n if (_input[0] === '_') {\n return 'Only system bucket names can begin with _'\n }\n if (_input.length < 1) {\n return `Please enter a name with at least 1 letters or numbers`\n }\n\n return null\n}\n\nconst DEFAULT_RETENTION_RULE = {\n type: 'expire' as 'expire',\n everySeconds: 30 * 24 * 60 * 60,\n}\n\nconst CreateBucketOverlay: FC = ({onCreate, onCancel}) => {\n const [name, setName] = useState('')\n const [retention, setRetention] = useState([])\n const [newSchemas, setNewSchemas] = useState([])\n\n const [schemaType, setSchemaType] = useState('implicit')\n\n const validForm = !validateName(name)\n const retentionType = retention[0]?.type ?? null\n const setRetentionType = (ret: string) => {\n if (ret === 'never') {\n setRetention([])\n } else if (ret === 'expire') {\n setRetention([{...DEFAULT_RETENTION_RULE}])\n }\n }\n const setRetentionDuration = (duration: string) => {\n const durationSeconds =\n durationToMilliseconds(parseDuration(duration)) / 1000\n setRetention([{...DEFAULT_RETENTION_RULE, everySeconds: durationSeconds}])\n }\n\n const onSubmit = () => {\n const out: ExtendedBucket = {\n name: name,\n readableRetention: 'forever',\n retentionRules: retention,\n schemas: newSchemas,\n }\n\n if (onCreate) {\n onCreate(out)\n }\n }\n\n const addSchemaLine = () => {\n setNewSchemas([...newSchemas, {valid: false}])\n }\n\n const schemaPanels = newSchemas.map((schema, index) => (\n {\n newSchemas[index] = update\n setNewSchemas([...newSchemas])\n }}\n onDelete={() => {\n newSchemas.splice(index, 1)\n setNewSchemas([...newSchemas])\n }}\n />\n ))\n\n return (\n
\n \n \n {status => (\n ) => {\n setName(e.target.value)\n }}\n testID=\"bucket-form-name\"\n />\n )}\n \n \n \n \n Never\n \n \n Older Than\n \n \n {retentionType === 'expire' && (\n \n )}\n \n {CLOUD && (\n \n \n Advanced Configuration (Optional)\n \n \n
\n \n
\n
Bucket Schema Type
\n
\n By default, buckets have an implicit schema that conforms\n to your data. Use explicit schemas to enforce specific\n data types and columns. Bucket Schema type cannot be\n changed after creation.{' '}\n \n {' '}\n Learn more\n \n
\n
\n \n \n Implicit\n \n \n \n \n Explicit\n \n \n \n {schemaType === 'explicit' && (\n \n
\n
Measurement Schema
\n
\n Measurement Schemas provide non-conforming validation\n for data in the bucket. once a measurement schema is\n saved you cannot delete or modify existing columns. You\n may only add new columns.{' '}\n \n {' '}\n Learn more\n \n
\n
\n \n {schemaPanels}\n \n )}\n
\n
\n
\n )}\n
\n \n \n \n \n
\n )\n}\n\nexport default CreateBucketOverlay\n","import React, {FC, useRef, useContext} from 'react'\n\n// Components\nimport {\n Popover,\n PopoverInteraction,\n PopoverPosition,\n Appearance,\n ComponentColor,\n ComponentSize,\n List,\n ListItemRef,\n} from '@influxdata/clockface'\nimport CreateBucketOverlay from 'src/flows/pipes/QueryBuilder/CreateBucketOverlay'\nimport {BucketContext} from 'src/shared/contexts/buckets'\n\nconst CreateBucket: FC = () => {\n const {createBucket} = useContext(BucketContext)\n const triggerRef = useRef(null)\n\n return (\n <>\n {}}\n wrapText={false}\n size={ComponentSize.ExtraSmall}\n >\n + Create Bucket\n \n (\n {\n createBucket(bucket)\n onHide()\n }}\n />\n )}\n />\n \n )\n}\n\nexport default CreateBucket\n","// Libraries\nimport React, {FC, useState, useContext, useEffect} from 'react'\n\n// Components\nimport {Input, ComponentSize, List, Gradients} from '@influxdata/clockface'\nimport CreateBucket from 'src/flows/pipes/QueryBuilder/CreateBucket'\nimport {Bucket, RemoteDataState} from 'src/types'\nimport BuilderCard from 'src/timeMachine/components/builderCard/BuilderCard'\nimport {QueryBuilderContext} from 'src/flows/pipes/QueryBuilder/context'\nimport {BucketContext} from 'src/shared/contexts/buckets'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {event} from 'src/cloud/utils/reporting'\n\n// this is used by notebooks\nconst BucketSelector: FC = () => {\n const {data} = useContext(PipeContext)\n const {loading, buckets, addBucket} = useContext(BucketContext)\n const {selectBucket} = useContext(QueryBuilderContext)\n\n const [search, setSearch] = useState('')\n\n useEffect(() => {\n if (loading !== RemoteDataState.Done) {\n return\n }\n const allBuckets = new Set(buckets.map(b => b.name))\n const missingBuckets = data.buckets.filter(b => !allBuckets.has(b.name))\n missingBuckets.forEach(b => {\n addBucket(b as Bucket)\n })\n }, [loading, buckets, data.buckets])\n\n if (loading === RemoteDataState.Done && !buckets.length) {\n return (\n \n \n No buckets found\n \n )\n }\n const _selectBucket = (bucket?: string) => {\n if (bucket) {\n event('Query Builder Bucket Selected', {\n usedSearch: !!search.length ? 'yus' : 'nah',\n })\n }\n selectBucket(bucket)\n }\n const filteredBuckets = buckets.filter(\n bucket =>\n !search.length ||\n bucket.name.toLocaleLowerCase().includes(search.toLocaleLowerCase())\n )\n\n if (!filteredBuckets.length) {\n return (\n \n \n \n setSearch(e.target.value)}\n />\n \n No buckets matched your search\n \n )\n }\n\n const sections = filteredBuckets.reduce(\n (acc, curr) => {\n acc[curr.type].push(curr)\n return acc\n },\n {user: [], system: [], sample: []}\n )\n\n const selected = data?.buckets[0]?.name\n const renderListItem = item => {\n const isSelected = selected === item.name\n const title = isSelected\n ? 'Click to remove this filter'\n : `Click to filter by ${item.name}`\n\n return (\n \n {item.name}\n \n )\n }\n\n return (\n \n \n \n setSearch(e.target.value)}\n onClear={() => setSearch('')}\n />\n \n \n \n {sections.user.map(renderListItem)}\n {isFlagEnabled('sharedBucketCreator') && }\n {sections.system.length && (\n \n )}\n {sections.system.map(renderListItem)}\n {sections.sample.length && (\n \n )}\n {sections.sample.map(renderListItem)}\n \n \n )\n}\n\nexport default BucketSelector\n","// Libraries\nimport React, {\n FC,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport {\n Input,\n AlignItems,\n ComponentSize,\n FlexDirection,\n FlexBox,\n} from '@influxdata/clockface'\n\n// Contexts\nimport {QueryBuilderContext} from 'src/flows/pipes/QueryBuilder/context'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Utils\nimport {toComponentStatus} from 'src/shared/utils/toComponentStatus'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Types\nimport {RemoteDataState, BuilderAggregateFunctionType} from 'src/types'\n\n// Components\nimport SearchableDropdown from 'src/shared/components/SearchableDropdown'\nimport TagSelectorCount from 'src/shared/components/TagSelectorCount'\nimport WaitingText from 'src/shared/components/WaitingText'\nimport BuilderCard from 'src/timeMachine/components/builderCard/BuilderCard'\nimport SelectorList from 'src/timeMachine/components/SelectorList'\n\nimport {event} from 'src/cloud/utils/reporting'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\n\nconst DEBOUNCE_TIMEOUT = 500\nconst debounce_array = []\ntype NOOP = () => void\nconst debouncer = (idx: number, action: NOOP): void => {\n if (debounce_array[idx]) {\n clearTimeout(debounce_array[idx])\n }\n\n debounce_array[idx] = setTimeout(() => {\n action()\n delete debounce_array[idx]\n }, DEBOUNCE_TIMEOUT)\n}\n\ninterface Props {\n idx: number\n}\n\nconst Card: FC = ({idx}) => {\n const {\n cards,\n selectMeasurement,\n add,\n cancelKey,\n cancelValue,\n update,\n remove,\n loadKeys,\n loadValues,\n } = useContext(QueryBuilderContext)\n const {data} = useContext(PipeContext)\n const card = cards[idx]\n const [keySearches, setKeySearches] = useState([])\n const [valueSearches, setValueSearches] = useState([])\n\n const allItems = useMemo(() => {\n const results = new Set(card?.values?.results)\n const selected = card?.values?.selected?.filter(s => !results.has(s))\n\n return [...selected, ...Array.from(results)]\n }, [card?.values?.selected, card?.values?.results])\n\n const _remove =\n idx !== 0 &&\n (() => {\n event('Query Builder Card Removed')\n remove(idx)\n })\n\n const _update = (fnType: BuilderAggregateFunctionType): void => {\n update(idx, {\n aggregateFunctionType:\n fnType.toLowerCase() as BuilderAggregateFunctionType,\n })\n }\n\n const keySearch = useCallback(\n (search: string) => {\n keySearches[idx] = search\n setKeySearches([...keySearches])\n debouncer(idx, () => {\n loadKeys(idx, search)\n })\n },\n [loadKeys, card.keys, idx]\n )\n\n const keySelect = val => {\n if (card.keys.selected[0] === val) {\n return\n }\n event('Query Builder key selected')\n update(idx, {\n keys: {\n ...card.keys,\n selected: [val],\n },\n })\n }\n\n const valueSearch = (search: string) => {\n valueSearches[idx] = search\n setValueSearches([...valueSearches])\n debouncer(idx, () => {\n loadValues(idx, search)\n })\n }\n\n const isCompliant =\n isFlagEnabled('newQueryBuilder') &&\n idx === 0 &&\n (card.keys.selected.length === 0 ||\n (card.keys.selected.length === 1 &&\n card.keys.selected[0] === '_measurement')) &&\n card.aggregateFunctionType !== 'group' &&\n card.values.selected.length <= 1\n\n const valueSelect = val => {\n const index = card.values.selected.indexOf(val)\n\n if (isCompliant) {\n if (index === -1) {\n event('Query Builder Value Selected')\n selectMeasurement(val)\n } else {\n event('Query Builder Value Unselected')\n selectMeasurement(null)\n }\n\n return\n }\n\n if (index === -1) {\n event('Query Builder Value Selected')\n card.values.selected.push(val)\n } else {\n event('Query Builder Value Unselected')\n card.values.selected.splice(index, 1)\n }\n\n update(idx, card)\n\n if (\n index === -1 &&\n card.values.selected.length === 1 &&\n idx === cards.length - 1\n ) {\n add()\n } else {\n for (let ni = idx + 1; ni < cards.length; ni++) {\n loadKeys(ni)\n }\n }\n }\n\n useEffect(() => {\n let promise\n if (data.buckets[0] && card.keys.loading === RemoteDataState.NotStarted) {\n promise = loadKeys(idx)\n if (promise instanceof Promise) {\n promise.finally(() => {\n promise = null\n })\n }\n }\n\n return () => {\n cancelKey(idx)\n }\n }, [data.buckets, card.keys.loading])\n\n useEffect(() => {\n let promise\n if (\n card.keys.loading === RemoteDataState.Done &&\n card.values.loading !== RemoteDataState.Done\n ) {\n promise = loadValues(idx)\n\n if (promise instanceof Promise) {\n promise.finally(() => {\n promise = null\n })\n }\n }\n\n return () => {\n cancelValue(idx)\n }\n }, [card.keys.loading, card.values.loading])\n\n if (card.keys.loading === RemoteDataState.NotStarted) {\n let emptyText = 'Select a value first'\n\n if (idx === 0) {\n emptyText = 'Select a bucket first'\n }\n\n return (\n \n {emptyText}\n \n )\n }\n\n if (card.keys.loading === RemoteDataState.Error) {\n return (\n \n Failed to load tag keys\n \n )\n }\n\n if (card.keys.loading === RemoteDataState.Done && !card.keys.results.length) {\n return (\n \n \n No tag keys found in the current time range\n \n \n )\n }\n\n let _values\n\n if (card.values.loading === RemoteDataState.Error) {\n _values = (\n \n {`Failed to load tag values for ${card.keys.selected[0]}`}\n \n )\n } else if (\n card.values.loading === RemoteDataState.Loading ||\n card.values.loading === RemoteDataState.NotStarted\n ) {\n _values = (\n \n \n \n )\n } else if (card.values.loading === RemoteDataState.Done && !allItems.length) {\n _values = (\n \n No values found in the current time range\n \n )\n } else {\n _values = (\n \n )\n }\n\n let placeholderValue = `${card.keys.selected[0]} tag values`\n\n if (isFlagEnabled('newQueryBuilder')) {\n if (card.keys.selected[0] === '_measurement') {\n placeholderValue = 'measurements'\n } else if (card.keys.selected[0] === '_field') {\n placeholderValue = 'fields'\n }\n }\n\n if (card.aggregateFunctionType === 'group') {\n return (\n \n s.toUpperCase())}\n selectedOption={card.aggregateFunctionType.toUpperCase()}\n onDelete={_remove}\n onSelect={_update}\n />\n \n {\n valueSearch(evt.target.value)\n }}\n onClear={() => valueSearch('')}\n />\n \n {_values}\n \n )\n }\n\n return (\n \n {!isCompliant && (\n s.toUpperCase())}\n selectedOption={card.aggregateFunctionType.toUpperCase()}\n onDelete={_remove}\n onSelect={_update}\n />\n )}\n {isCompliant && }\n \n {!isCompliant && (\n \n \n \n \n {!!card?.values?.selected?.length && (\n \n )}\n \n )}\n {\n valueSearch(evt.target.value)\n }}\n onClear={() => valueSearch('')}\n />\n \n {_values}\n \n )\n}\n\nconst CardList: FC = () => {\n const {cards} = useContext(QueryBuilderContext)\n\n if (!cards.length) {\n return null\n }\n\n return (\n <>\n {cards.map((_card, idx) => (\n \n ))}\n \n )\n}\n\nexport default CardList\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {DapperScrollbars} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\n// Contexts\nimport {BucketProvider} from 'src/shared/contexts/buckets'\nimport {QueryBuilderProvider} from 'src/flows/pipes/QueryBuilder/context'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Components\nimport AddButton from 'src/flows/pipes/QueryBuilder/AddButton'\nimport BucketSelector from 'src/flows/pipes/QueryBuilder/BucketSelector'\nimport CardList from 'src/flows/pipes/QueryBuilder/CardList'\n\nconst QueryBuilder: FC = ({Context}) => {\n const {scope} = useContext(PipeContext)\n\n return (\n \n \n \n
\n
\n \n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n )\n}\n\nexport default QueryBuilder\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {\n ComponentStatus,\n DapperScrollbars,\n Dropdown,\n IconFont,\n} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\n// Contexts\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Components\nimport BuilderCard from 'src/timeMachine/components/builderCard/BuilderCard'\nimport SelectorList from 'src/timeMachine/components/SelectorList'\n\nconst QueryBuilder: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n
\n
\n \n
\n \n \n \n (\n \n {!!data?.buckets?.length && data?.buckets?.[0]?.name\n ? data.buckets[0].name\n : 'No Bucket Selected'}\n \n )}\n menu={onCollapse => (\n \n )}\n style={{width: '250px', flex: '0 0 250px'}}\n />\n \n \n {data.tags.map(tag => (\n \n \n (\n \n {tag.key}\n \n )}\n menu={onCollapse => (\n \n )}\n style={{width: '250px'}}\n />\n {}}\n multiSelect\n />\n \n ))}\n
\n
\n
\n
\n
\n )\n}\n\nexport default QueryBuilder\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport ReadOnly from './readOnly'\nimport './style.scss'\n\nexport default register => {\n register({\n type: 'queryBuilder',\n family: 'inputs',\n priority: 1,\n component: View,\n featureFlag: 'flow-panel--query-builder',\n button: 'Query Builder',\n initial: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n },\n readOnlyComponent: ReadOnly,\n source: data => {\n if (\n !data.buckets[0] ||\n !data.tags.reduce((acc, curr) => acc.concat(curr.values), []).length\n ) {\n return ''\n }\n\n const tags = data.tags\n .map(tag => {\n if (!tag.key) {\n return ''\n }\n\n if (tag.aggregateFunctionType === 'filter') {\n if (!tag.values.length) {\n return ''\n }\n\n const vals = tag.values\n .map(\n value => `r[\"${tag.key}\"] == \"${value.replace(/\\\\/g, '\\\\\\\\')}\"`\n )\n .join(' or ')\n\n return `\\n |> filter(fn: (r) => ${vals})`\n }\n\n if (tag.aggregateFunctionType === 'group') {\n const quotedValues = tag.values.map(value => `\"${value}\"`) // wrap the value in double quotes\n\n if (quotedValues.length) {\n return `\\n |> group(columns: [${quotedValues.join(', ')}])` // join with a comma (e.g. \"foo\",\"bar\",\"baz\")\n }\n\n return '\\n |> group()'\n }\n\n return ''\n })\n .join('')\n\n let _source\n if (data.buckets[0].type === 'sample') {\n _source = `import \"influxdata/influxdb/sample\"\\nsample.data(set: \"${data.buckets[0].id}\")`\n } else {\n _source = `from(bucket: \"${data.buckets[0].name}\")`\n }\n\n return `${_source}\\n\\t|> range(start: v.timeRangeStart, stop: v.timeRangeStop)${tags}`\n },\n })\n}\n","// Libraries\nimport React, {FC} from 'react'\n\n// Component\nimport {Button, ComponentSize, ComponentColor} from '@influxdata/clockface'\n\ninterface Props {\n expression: string\n onClickFunction: (expression: string) => void\n testID: string\n}\n\nconst defaultProps = {\n testID: 'alert-expression',\n}\n\nconst ToolbarExpression: FC = ({\n expression,\n onClickFunction,\n testID,\n}) => {\n const handleClickFunction = () => {\n onClickFunction(expression)\n }\n\n return (\n \n {expression}\n \n \n )\n}\n\nToolbarExpression.defaultProps = defaultProps\n\nexport default ToolbarExpression\n","import React, {FC, useState, useMemo, useCallback} from 'react'\n\nimport {\n Input,\n InputType,\n IconFont,\n EmptyState,\n ComponentSize,\n} from '@influxdata/clockface'\nimport {FromFluxResult} from '@influxdata/giraffe'\nimport Expression from 'src/flows/pipes/Notification/Expression'\n\ninterface Props {\n parsed: FromFluxResult\n onSelect: (exp: string) => void\n}\n\ninterface SchemaExpressions {\n [key: string]: Array\n}\n\nconst parsedResultToSchema = (\n parsed: FromFluxResult,\n search: string\n): SchemaExpressions => {\n const filtered = [\n /^_start$/,\n /^_stop$/,\n /^_time$/,\n /^_value/,\n /^_measurement$/,\n /^_field$/,\n /^table$/,\n /^result$/,\n ]\n if (!parsed) {\n return\n }\n\n const out = parsed.table as any\n const fields = out.columns._field?.data\n const columns = out.columnKeys.filter(key => {\n return filtered.reduce((acc, curr) => {\n return acc && !curr.test(key)\n }, true)\n })\n const columnsToInclude = ['_start', '_stop', '_measurement']\n const systemVars = [\n '_check_id',\n '_check_name',\n '_level',\n '_notebook_link',\n '_source_measurement',\n '_type',\n ]\n const schema = {\n fields: new Set(\n fields?.filter(f => f.toLowerCase().includes(search.toLowerCase()))\n ),\n tags: new Set(\n columns?.filter(\n c =>\n out.columns[c].data.filter(d => d) &&\n c.toLowerCase().includes(search.toLowerCase())\n )\n ),\n columns: out.columnKeys?.filter(\n c =>\n columnsToInclude.includes(c) &&\n c.toLowerCase().includes(search.toLowerCase())\n ),\n system: systemVars.filter(s =>\n s.toLowerCase().includes(search.toLowerCase())\n ),\n }\n\n const ret = {}\n Object.keys(schema).forEach(k => {\n if (schema[k].length || schema[k].size) {\n ret[k] = Array.from(schema[k])\n }\n })\n return ret\n}\n\nconst capitalizeFirstLetter = (s: string) => {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\nconst categoriesCompare = (a: string, b: string) => {\n const order = ['measurements', 'fields', 'tags', 'columns', 'system']\n return order.indexOf(a) - order.indexOf(b)\n}\n\nconst Expressions: FC = ({parsed, onSelect}) => {\n const [search, setSearch] = useState('')\n const updateSearch = useCallback(\n e => {\n setSearch(e.target.value)\n },\n [search, setSearch]\n )\n\n const schemaExpressions = useMemo(\n () => parsedResultToSchema(parsed, search),\n [parsed, search]\n )\n\n let expComponent\n\n if (!Object.keys(schemaExpressions).length) {\n expComponent = (\n \n No expressions match your search\n \n )\n } else {\n expComponent = (\n <>\n {Object.keys(schemaExpressions)\n .sort((a, b) => categoriesCompare(a, b))\n .map(category => (\n
\n
\n {capitalizeFirstLetter(category)}\n
\n {schemaExpressions[category].map(exp => (\n \n ))}\n
\n ))}\n \n )\n }\n\n return (\n
\n
\n \n
\n
\n {expComponent}\n
\n
\n )\n}\n\nexport default Expressions\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./Threshold.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC, useCallback, useContext} from 'react'\nimport {\n ComponentSize,\n FlexBox,\n AlignItems,\n TextBlock,\n Dropdown,\n FlexDirection,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport 'src/flows/pipes/Notification/Threshold.scss'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\ninterface Props {\n readOnly?: boolean\n}\n\nconst Measurement: FC = ({readOnly}) => {\n const {data, update, results} = useContext(PipeContext)\n const {measurement} = data\n\n const measurements = Array.from(\n new Set(results.parsed.table.columns['_measurement']?.data as string[])\n )\n\n const onSelect = useCallback(\n (measurement: string) => {\n event('Changed Notification Measurement')\n update({measurement})\n },\n [measurements, update]\n )\n\n const menuItems = measurements.map(key => (\n onSelect(key)}\n selected={key === measurement}\n title={key}\n disabled={!!readOnly}\n >\n {key}\n \n ))\n\n const menu = onCollapse => (\n {menuItems}\n )\n\n const menuButton = (active, onClick) => (\n \n {measurement || 'Select a measurement'}\n \n )\n\n return (\n \n \n \n \n \n \n )\n}\n\nexport default Measurement\n","import React, {ChangeEvent, FC, useCallback, useContext, useMemo} from 'react'\nimport {\n ComponentSize,\n FlexBox,\n IconFont,\n TextBlock,\n Dropdown,\n FlexDirection,\n Input,\n InputType,\n Icon,\n ComponentStatus,\n} from '@influxdata/clockface'\nimport DurationInput from 'src/shared/components/DurationInput'\nimport {CHECK_OFFSET_OPTIONS} from 'src/alerting/constants'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport 'src/flows/pipes/Notification/Threshold.scss'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {\n deadmanType,\n Threshold as ThresholdType,\n ThresholdFormat,\n THRESHOLD_TYPES,\n} from 'src/flows/pipes/Visualization/threshold'\n\ninterface Props {\n readOnly?: boolean\n}\n\nconst Threshold: FC = ({readOnly}) => {\n const {data, update, results} = useContext(PipeContext)\n\n const fields = Array.from(\n new Set(results.parsed.table.columns['_field']?.data as string[])\n )\n\n const thresholds = useMemo(() => data?.thresholds ?? [], [data?.thresholds])\n\n const setThresholdType = useCallback(\n (type: string, index) => {\n if (!THRESHOLD_TYPES[type]) {\n return\n }\n\n event('Changed Notification Threshold', {type})\n\n const threshold = thresholds.find((_, i) => index === i)\n\n if (!threshold) {\n return\n }\n\n threshold.type = type\n\n let updatedThreshold = thresholds\n\n if (THRESHOLD_TYPES[type].format === ThresholdFormat.Range) {\n threshold.min = 0\n threshold.max = 100\n } else if (THRESHOLD_TYPES[type].format === ThresholdFormat.Deadman) {\n updatedThreshold = [\n {\n type: deadmanType,\n deadmanCheckValue: '5s',\n deadmanStopValue: '90s',\n field: threshold?.field || 'Select a numeric field',\n },\n ]\n } else {\n threshold.value = 20\n }\n update({thresholds: updatedThreshold})\n },\n [thresholds, update]\n )\n\n const setColumn = useCallback(\n (column: string, index: number) => {\n event('Changed Notification Threshold Column')\n\n const threshold = thresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.field = column\n }\n\n update({thresholds})\n },\n [thresholds, update]\n )\n\n const funcDropdown = useCallback(\n (threshold: ThresholdType, index: number) => {\n const menuItems = Object.entries(THRESHOLD_TYPES)\n .filter(([key]) => {\n if (index > 0 && key === deadmanType) {\n return false\n }\n return true\n })\n .map(([key, value]) => (\n setThresholdType(type, index)}\n selected={key === threshold?.type}\n title={value.name}\n disabled={!!readOnly}\n >\n {value?.name}\n \n ))\n const menu = onCollapse => (\n {menuItems}\n )\n const menuButton = (active, onClick) => (\n \n {THRESHOLD_TYPES[threshold?.type]?.name || 'Select a function'}\n \n )\n return \n },\n [setThresholdType]\n )\n\n const columnDropdown = useCallback(\n (threshold: ThresholdType, index: number) => {\n const menuItems = fields.map(key => (\n setColumn(field, index)}\n selected={key === threshold?.field}\n title={key}\n disabled={!!readOnly}\n >\n {key}\n \n ))\n const menu = onCollapse => (\n {menuItems}\n )\n const menuButton = (active, onClick) => (\n \n {threshold?.field || 'Select a numeric field'}\n \n )\n return \n },\n [fields, setColumn]\n )\n\n const updateMin = (event: ChangeEvent, index: number) => {\n const threshold = thresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.min = event.target.value\n }\n\n update({thresholds})\n }\n\n const updateMax = (event: ChangeEvent, index: number) => {\n const threshold = thresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.max = event.target.value\n }\n\n update({thresholds})\n }\n\n const updateDeadmanCheckValue = (value: string) => {\n // we only ever want to present deadman checks in the first instance\n // so we're only ever concerned with the first value of the threshold\n // since anything after that is irrelevant\n update({\n thresholds: [\n {\n ...thresholds[0],\n deadmanCheckValue: value,\n type: deadmanType,\n },\n ],\n })\n }\n\n const updateDeadmanStopValue = (value: string) => {\n // we only ever want to present deadman checks in the first instance\n // so we're only ever concerned with the first value of the threshold\n // since anything after that is irrelevant\n update({\n thresholds: [\n {\n ...thresholds[0],\n deadmanStopValue: value,\n type: deadmanType,\n },\n ],\n })\n }\n\n const updateValue = (\n changeEvent: ChangeEvent,\n index: number\n ) => {\n event('Alert Panel (Notebooks) - Threshold Value Entered')\n const threshold = thresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.value = changeEvent.target.value\n }\n\n update({thresholds})\n }\n\n const handleAddThreshold = () => {\n event('Alert Panel (Notebooks) - New Threshold Added')\n update({\n thresholds: [\n ...thresholds,\n {\n type: 'greater',\n value: 0,\n },\n ],\n })\n }\n\n const handleRemoveThreshold = (index: number) => {\n const copy = thresholds.slice()\n copy.splice(index, 1)\n\n update({\n thresholds: copy,\n })\n }\n\n const thresholdEntry = (threshold: ThresholdType, index: number) => {\n if (threshold?.type === deadmanType) {\n return (\n \n \n \n \n \n \n \n \n \n )\n }\n if (THRESHOLD_TYPES[threshold?.type]?.format === ThresholdFormat.Range) {\n return (\n \n \n updateMin(event, index)}\n size={ComponentSize.Medium}\n status={\n !!readOnly ? ComponentStatus.Disabled : ComponentStatus.Default\n }\n />\n \n \n \n updateMax(event, index)}\n size={ComponentSize.Medium}\n status={\n !!readOnly ? ComponentStatus.Disabled : ComponentStatus.Default\n }\n />\n \n \n )\n }\n return (\n \n \n updateValue(event, index)}\n size={ComponentSize.Medium}\n status={\n !!readOnly ? ComponentStatus.Disabled : ComponentStatus.Default\n }\n />\n \n \n )\n }\n\n return (\n \n {thresholds.map((threshold: ThresholdType, index: number) => (\n \n \n \n {columnDropdown(threshold, index)}\n \n \n \n {funcDropdown(threshold, index)}\n \n \n {thresholdEntry(threshold, index)}\n \n \n {index !== 0 && !readOnly ? (\n handleRemoveThreshold(index)}\n >\n \n \n ) : null}\n \n \n ))}\n {thresholds[0].type !== deadmanType && !readOnly && (\n \n \n \n \n \n )}\n \n )\n}\n\nexport default Threshold\n","import React, {FC, useContext, useCallback} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\n\n// Components\nimport ExportTaskButton from 'src/flows/pipes/Schedule/ExportTaskButton'\nimport {ENDPOINT_DEFINITIONS} from 'src/flows/pipes/Notification/endpoints'\n\n// Contexts\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {remove} from 'src/shared/contexts/query'\n\n// Types\nimport {\n deadmanType,\n THRESHOLD_TYPES,\n} from 'src/flows/pipes/Visualization/threshold'\nimport {ImportDeclaration} from 'src/types/ast'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {notify} from 'src/shared/actions/notifications'\nimport {exportAlertToTaskSuccess} from 'src/shared/copy/notifications'\n\nconst ExportTask: FC = () => {\n const dispatch = useDispatch()\n const {id, data} = useContext(PipeContext)\n const {simplify, getPanelQueries} = useContext(FlowQueryContext)\n\n const queryText = getPanelQueries(id)?.source\n\n const generateDeadmanTask = useCallback(() => {\n // simplify takes care of all the variable nonsense in the query\n const ast = parse(simplify(queryText))\n\n const [deadman] = data.thresholds\n\n const vars = remove(\n ast,\n node => node.type === 'OptionStatement' && node.assignment.id.name === 'v'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n\n vars.timeRangeStart = `-${deadman?.deadmanStopValue}`\n\n const params = remove(\n ast,\n node =>\n node.type === 'OptionStatement' && node.assignment.id.name === 'task'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n\n if (!data.measurement) {\n throw new Error('please select a measurement.')\n }\n const measurement = `(r) => r[\"_measurement\"] == \"${data.measurement}\"`\n\n const conditions =\n `(r) => ` + THRESHOLD_TYPES[deadmanType].condition(deadman)\n const imports = parse(`\nimport \"strings\"\nimport \"regexp\"\nimport \"influxdata/influxdb/monitor\"\nimport \"influxdata/influxdb/schema\"\nimport \"influxdata/influxdb/secrets\"\nimport \"experimental\"\n${ENDPOINT_DEFINITIONS[data.endpoint]?.generateImports()}`)\n\n imports.imports = Object.values(\n imports.imports.concat(ast.imports || []).reduce((acc, curr) => {\n acc[curr.path.value] = curr\n return acc\n }, {})\n ).sort((a: ImportDeclaration, b: ImportDeclaration) =>\n b.path.value.toLowerCase().localeCompare(a.path.value.toLowerCase())\n )\n\n ast.imports = []\n\n const newQuery = `\n${format_from_js_file(imports)}\n\ncheck = {\n _check_id: \"${id}\",\n _check_name: \"Notebook Generated Deadman Check\",\n _type: \"deadman\",\n tags: {},\n}\n\nnotification = {\n _notification_rule_id: \"${id}\",\n _notification_rule_name: \"Notebook Generated Rule\",\n _notification_endpoint_id: \"${id}\",\n _notification_endpoint_name: \"Notebook Generated Endpoint\",\n}\n\ntask_data = ${format_from_js_file(ast)}\ntrigger = ${conditions}\nmessageFn = (r) => (\"${data.message}\")\n\n${ENDPOINT_DEFINITIONS[data.endpoint]?.generateQuery(\n data.endpointData,\n measurement\n)}\n|> monitor[\"deadman\"](t: experimental[\"subDuration\"](from: now(), d: ${\n deadman.deadmanCheckValue\n }))`\n\n const newAST = parse(newQuery)\n\n if (!params.name) {\n params.name = `\"Notebook Deadman Task for ${id}\"`\n }\n\n if (data.interval) {\n params.every = data.interval\n }\n\n if (data.offset) {\n params.offset = data.offset\n }\n\n if (Object.keys(vars).length) {\n const varString = Object.entries(vars)\n .map(([key, val]) => `${key}: ${val}`)\n .join(',\\n')\n const varHeader = parse(`option v = {${varString}}\\n`)\n newAST.body.unshift(varHeader.body[0])\n }\n\n const paramString = Object.entries(params)\n .map(([key, val]) => `${key}: ${val}`)\n .join(',\\n')\n const taskHeader = parse(`option task = {${paramString}}\\n`)\n newAST.body.unshift(taskHeader.body[0])\n\n return format_from_js_file(newAST)\n }, [\n id,\n queryText,\n data.every,\n data.offset,\n data.endpointData,\n data.endpoint,\n data.measurement,\n data.thresholds,\n data.message,\n ])\n\n const generateThresholdTask = useCallback(() => {\n // simplify takes care of all the variable nonsense in the query\n const ast = parse(simplify(queryText))\n\n const vars = remove(\n ast,\n node => node.type === 'OptionStatement' && node.assignment.id.name === 'v'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n const params = remove(\n ast,\n node =>\n node.type === 'OptionStatement' && node.assignment.id.name === 'task'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n\n if (!data.measurement) {\n throw new Error('please select a measurement.')\n }\n const measurement = `(r) => r[\"_measurement\"] == \"${data.measurement}\"`\n\n const conditions =\n `(r) => ` +\n data.thresholds\n .map(threshold => THRESHOLD_TYPES[threshold.type].condition(threshold))\n .join(' and ')\n\n const imports = parse(`\nimport \"strings\"\nimport \"regexp\"\nimport \"influxdata/influxdb/monitor\"\nimport \"influxdata/influxdb/schema\"\nimport \"influxdata/influxdb/secrets\"\nimport \"experimental\"\n${ENDPOINT_DEFINITIONS[data.endpoint]?.generateImports()}`)\n\n imports.imports = Object.values(\n imports.imports.concat(ast.imports || []).reduce((acc, curr) => {\n acc[curr.path.value] = curr\n return acc\n }, {})\n ).sort((a: ImportDeclaration, b: ImportDeclaration) =>\n b.path.value.toLowerCase().localeCompare(a.path.value.toLowerCase())\n )\n\n ast.imports = []\n\n const newQuery = `\n${format_from_js_file(imports)}\n\ncheck = {\n _check_id: \"${id}\",\n _check_name: \"Notebook Generated Check\",\n _type: \"custom\",\n tags: {},\n}\nnotification = {\n _notification_rule_id: \"${id}\",\n _notification_rule_name: \"Notebook Generated Rule\",\n _notification_endpoint_id: \"${id}\",\n _notification_endpoint_name: \"Notebook Generated Endpoint\",\n}\n\ntask_data = ${format_from_js_file(ast)}\ntrigger = ${conditions}\nmessageFn = (r) => (\"${data.message}\")\n\n${ENDPOINT_DEFINITIONS[data.endpoint]?.generateQuery(\n data.endpointData,\n measurement\n)}`\n\n const newAST = parse(newQuery)\n\n if (!params.name) {\n params.name = `\"Notebook Task for ${id}\"`\n }\n\n if (data.interval) {\n params.every = data.interval\n }\n\n if (data.offset) {\n params.offset = data.offset\n }\n\n if (Object.keys(vars).length) {\n const varString = Object.entries(vars)\n .map(([key, val]) => `${key}: ${val}`)\n .join(',\\n')\n const varHeader = parse(`option v = {${varString}}\\n`)\n newAST.body.unshift(varHeader.body[0])\n }\n\n const paramString = Object.entries(params)\n .map(([key, val]) => `${key}: ${val}`)\n .join(',\\n')\n const taskHeader = parse(`option task = {${paramString}}\\n`)\n newAST.body.unshift(taskHeader.body[0])\n\n return format_from_js_file(newAST)\n }, [\n id,\n queryText,\n data.every,\n data.offset,\n data.endpointData,\n data.endpoint,\n data.measurement,\n data.thresholds,\n data.message,\n ])\n\n const generateTask = useCallback(() => {\n event('Alert Panel (Notebooks) - Export Alert Task Clicked')\n\n if (data.thresholds[0].type === deadmanType) {\n return generateDeadmanTask()\n } else {\n return generateThresholdTask()\n }\n }, [generateDeadmanTask, generateThresholdTask, data.thresholds])\n\n const handleTaskCreation = _ => {\n dispatch(notify(exportAlertToTaskSuccess(data.endpoint)))\n }\n\n return (\n \n )\n}\n\nexport default ExportTask\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./styles.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {\n FC,\n useContext,\n useCallback,\n useMemo,\n useState,\n lazy,\n Suspense,\n useEffect,\n} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {parse} from '@influxdata/flux-lsp-browser'\nimport {\n ComponentStatus,\n Form,\n FlexBox,\n Input,\n InputType,\n Icon,\n IconFont,\n ComponentSize,\n Panel,\n AlignItems,\n JustifyContent,\n List,\n ComponentColor,\n Button,\n InfluxColors,\n TechnoSpinner,\n SpinnerContainer,\n} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {remove} from 'src/shared/contexts/query'\nimport Expressions from 'src/flows/pipes/Notification/Expressions'\nimport Measurement from 'src/flows/pipes/Notification/Measurement'\nimport Threshold from 'src/flows/pipes/Notification/Threshold'\nimport {\n ENDPOINT_DEFINITIONS,\n ENDPOINT_ORDER,\n} from 'src/flows/pipes/Notification/endpoints'\nimport {SidebarContext} from 'src/flows/context/sidebar'\nimport ExportTask from 'src/flows/pipes/Notification/ExportTask'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\nconst NotificationMonacoEditor = lazy(\n () => import('src/flows/pipes/Notification/NotificationMonacoEditor')\n)\n\n// Types\nimport {RemoteDataState, EditorType} from 'src/types'\nimport {PipeProp} from 'src/types/flows'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n testNotificationSuccess,\n testNotificationFailure,\n} from 'src/shared/copy/notifications'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {getSecrets} from 'src/secrets/actions/thunks'\nimport {getAllSecrets} from 'src/resources/selectors'\n\n// Styles\nimport 'src/flows/pipes/Notification/styles.scss'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\nimport CreateSecretForm from 'src/secrets/components/CreateSecret/CreateSecretForm'\n\nconst Notification: FC = ({Context}) => {\n const dispatch = useDispatch()\n const {id, data, update, results, loading} = useContext(PipeContext)\n const {query, simplify, getPanelQueries} = useContext(FlowQueryContext)\n const {hideSub, id: showId, show, showSub} = useContext(SidebarContext)\n const [status, setStatus] = useState(\n RemoteDataState.NotStarted\n )\n const [editorInstance, setEditorInstance] = useState(null)\n\n let intervalError = ''\n let offsetError = ''\n\n useEffect(() => {\n dispatch(getSecrets())\n }, [])\n\n const createSecret = (callback: (id: string) => void) => {\n if (showId !== id) {\n show(id)\n showSub()\n }\n }\n\n const secrets = useSelector(getAllSecrets)\n\n if (!data.interval) {\n intervalError = 'Required'\n } else if (\n data.interval !==\n data.interval.match(/(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))/g)?.join('')\n ) {\n intervalError = 'Invalid Time'\n }\n\n if (\n data.offset &&\n data.offset !==\n data.offset.match(/(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))/g)?.join('')\n ) {\n offsetError = 'Invalid Time'\n }\n\n const loadingText = useMemo(() => {\n if (loading === RemoteDataState.Loading) {\n return 'Loading'\n }\n\n if (loading === RemoteDataState.NotStarted) {\n return UNPROCESSED_PANEL_TEXT\n }\n\n return 'No Data Returned'\n }, [loading])\n\n const queryText = getPanelQueries(id)?.source\n const hasTaskOption = useMemo(\n () =>\n !!Object.keys(\n remove(\n parse(simplify(queryText)),\n node =>\n node.type === 'OptionStatement' &&\n node.assignment.id.name === 'task'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n ).length,\n [queryText]\n )\n\n const numericColumns = (results?.parsed?.table?.columnKeys || []).filter(\n key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.parsed.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n }\n )\n\n const updateMessage = text => {\n update({\n message: text,\n })\n }\n\n const updateInterval = evt => {\n update({\n interval: evt.target.value,\n })\n }\n\n const updateOffset = evt => {\n update({\n offset: evt.target.value,\n })\n }\n\n const updateEndpoint = which => {\n event('Changed Notification Endpoint', {which})\n\n update({\n endpoint: which,\n endpointData: ENDPOINT_DEFINITIONS[which].data,\n })\n }\n\n const inject = useCallback(\n (exp: string): void => {\n if (!editorInstance) {\n return\n }\n const p = editorInstance.getPosition()\n const edits = [\n {\n range: new monaco.Range(\n p.lineNumber,\n p.column,\n p.lineNumber,\n p.column\n ),\n text: ` \\$\\{r.${exp}\\} `,\n },\n ]\n\n editorInstance.executeEdits('', edits)\n updateMessage(editorInstance.getValue())\n event('Injecting Expression into Alert Message')\n },\n [editorInstance]\n )\n\n const warningMessage = useMemo(() => {\n if (!hasTaskOption) {\n return\n }\n\n return (\n
\n
\n \n
\n
\n

The task option is reserved

\n

\n This panel will take precedence over any task configuration and\n overwrite the option. Remove it from your source query to remove\n this message\n

\n
\n
\n )\n }, [hasTaskOption])\n\n const avail = Object.keys(ENDPOINT_DEFINITIONS)\n .filter(\n k =>\n // show endpoints without feature flags or that have their flags enabled\n !ENDPOINT_DEFINITIONS[k].featureFlag ||\n isFlagEnabled(ENDPOINT_DEFINITIONS[k].featureFlag)\n )\n .sort((a, b) => ENDPOINT_ORDER.indexOf(a) - ENDPOINT_ORDER.indexOf(b))\n .map(k => (\n updateEndpoint(k)}\n selected={data.endpoint === k}\n >\n {ENDPOINT_DEFINITIONS[k].name}\n \n ))\n\n const handleTestEndpoint = async () => {\n event('Alert Panel (Notebooks) - Test Endpoint Clicked')\n\n const queryText = `\n import \"strings\"\n import \"regexp\"\n import \"influxdata/influxdb/schema\"\n import \"influxdata/influxdb/secrets\"\n import \"experimental\"\n ${ENDPOINT_DEFINITIONS[data.endpoint]?.generateTestImports()}\n\n ${ENDPOINT_DEFINITIONS[data.endpoint]?.generateTestQuery(\n data.endpointData\n )}\n `\n\n try {\n setStatus(RemoteDataState.Loading)\n await query(queryText)\n\n setStatus(RemoteDataState.Done)\n dispatch(notify(testNotificationSuccess(data.endpoint)))\n } catch (e) {\n setStatus(RemoteDataState.Error)\n dispatch(notify(testNotificationFailure(e.message)))\n }\n }\n\n const launcher = () => {\n if (showId === id) {\n hideSub()\n } else {\n event('Opening the Expressions Sidebar')\n show(id)\n showSub()\n }\n }\n\n if (\n (loading === RemoteDataState.NotStarted ||\n loading === RemoteDataState.Loading) &&\n !numericColumns.length\n ) {\n return (\n \n
\n
\n \n
\n
\n
{loadingText}
\n
\n
\n {warningMessage}\n
\n )\n }\n\n if (!numericColumns.length) {\n return (\n \n
\n
\n \n
\n
\n
\n This cell requires a numeric column. Check your source query\n
\n
\n
\n {warningMessage}\n
\n )\n }\n\n return (\n \n
\n {loading === RemoteDataState.Loading && (\n \n )}\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {avail}\n \n \n \n {React.createElement(\n ENDPOINT_DEFINITIONS[data.endpoint].component,\n {\n createSecret,\n secrets: secrets.sort((a, b) =>\n a.id.localeCompare(b.id)\n ),\n }\n )}\n \n \n \n \n \n }\n />\n }\n >\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {warningMessage}\n
\n )\n}\n\nexport default Notification\n","// Libraries\nimport React, {FC, useContext, useMemo, lazy, Suspense} from 'react'\nimport {\n ComponentStatus,\n Form,\n FlexBox,\n Input,\n InputType,\n Icon,\n IconFont,\n ComponentSize,\n Panel,\n AlignItems,\n List,\n InfluxColors,\n TechnoSpinner,\n SpinnerContainer,\n} from '@influxdata/clockface'\nimport Measurement from 'src/flows/pipes/Notification/Measurement'\nimport Threshold from 'src/flows/pipes/Notification/Threshold'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {ENDPOINT_DEFINITIONS} from 'src/flows/pipes/Notification/endpoints'\nconst NotificationMonacoEditor = lazy(\n () => import('src/flows/pipes/Notification/NotificationMonacoEditor')\n)\n\n// Types\nimport {RemoteDataState} from 'src/types'\nimport {PipeProp} from 'src/types/flows'\n\n// Styles\nimport 'src/flows/pipes/Notification/styles.scss'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\n\nconst ReadOnly: FC = ({Context}) => {\n const {data, results, loading} = useContext(PipeContext)\n\n const loadingText = useMemo(() => {\n if (loading === RemoteDataState.Loading) {\n return 'Loading'\n }\n\n if (loading === RemoteDataState.NotStarted) {\n return UNPROCESSED_PANEL_TEXT\n }\n\n return 'No Data Returned'\n }, [loading])\n\n const numericColumns = (results?.parsed?.table?.columnKeys || []).filter(\n key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.parsed.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n }\n )\n\n if (\n loading === RemoteDataState.NotStarted ||\n loading === RemoteDataState.Loading\n ) {\n return (\n \n
\n
\n \n
\n
\n
{loadingText}
\n
\n
\n
\n )\n }\n\n if (!numericColumns.length) {\n return (\n \n
\n
\n \n
\n
\n
\n This cell requires a numeric column. Check your source query\n
\n
\n
\n
\n )\n }\n\n return (\n \n
\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {ENDPOINT_DEFINITIONS[data.endpoint].name}\n \n \n \n \n \n {React.createElement(\n ENDPOINT_DEFINITIONS[data.endpoint].readOnlyComponent\n )}\n \n \n \n \n \n }\n />\n }\n >\n {}}\n readOnly\n />\n \n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'notification',\n family: 'output',\n priority: 1,\n component: View,\n readOnlyComponent: ReadOnly,\n featureFlag: 'flow-panel--notification',\n button: 'Alert',\n initial: {\n interval: '10m',\n offset: '0s',\n thresholds: [\n {\n type: 'greater',\n value: 0,\n },\n ],\n message:\n '${strings.title(v: r._type)} for ${r._source_measurement} triggered at ${time(v: r._source_timestamp)}!',\n endpoint: 'slack',\n endpointData: {\n url: 'https://hooks.slack.com/services/X/X/X',\n },\n },\n visual: (_data, query) => {\n return query\n },\n })\n}\n","import React, {FC, useEffect, useRef} from 'react'\nimport {InfluxColors} from '@influxdata/clockface'\nimport QRCode from 'qrcode.react'\n\ntype Props = {\n url: string\n}\n\nconst QRComponent: FC = ({url}) => {\n const ref = useRef(null)\n const [size, setSize] = React.useState(100)\n\n useEffect(() => {\n if (!ref?.current) {\n return\n }\n setSize(ref.current.getBoundingClientRect().width)\n }, [])\n\n return (\n
\n \n
\n )\n}\n\nexport default QRComponent\n","// Libraries\nimport React, {FC, useCallback, useContext, useMemo} from 'react'\n\n// Components\nimport {ComponentSize, Dropdown} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {event} from 'src/cloud/utils/reporting'\nimport {ErrorThreshold} from 'src/flows/pipes/Visualization/threshold'\n\ntype Props = {\n threshold: ErrorThreshold\n index: number\n}\n\nconst FieldColumnDropdown: FC = ({threshold, index}) => {\n const {data, update, results} = useContext(PipeContext)\n\n const fields = Array.from(\n new Set(results.parsed.table.columns['_field']?.data as string[])\n )\n\n const errorThresholds = useMemo(\n () => data?.errorThresholds ?? [],\n [data?.errorThresholds]\n )\n\n const setColumn = useCallback(\n (column: string, index: number) => {\n event('Changed Notification Threshold Column')\n\n const threshold = errorThresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.field = column\n }\n\n const values = Object.values(results.parsed.table.columns).filter(c => {\n return c.name === '_value'\n })\n\n const fields = (\n (results.parsed.table.columns['_field'].data as any) ?? []\n ).reduce((acc, curr, index) => {\n const type = values.find(d => {\n return d.data[index] !== undefined\n })?.type\n if (!acc[curr]) {\n acc[curr] = {}\n }\n acc[curr][type] = true\n return acc\n }, {})\n\n const fieldTypes = Object.keys(fields[threshold?.field] ?? {})\n let fieldType: 'not-number' | 'number' = 'not-number'\n if (fieldTypes.length === 1 && fieldTypes[0] === 'number') {\n fieldType = 'number'\n }\n\n threshold.fieldType = fieldType\n\n // We want to invalidate the previous type selection if the\n // fieldType is not a number, and the selected type is not equality based\n if (\n threshold.fieldType !== 'number' &&\n threshold.type !== 'equal' &&\n threshold.type !== 'not-equal'\n ) {\n threshold.type = 'equal'\n }\n\n update({errorThresholds})\n },\n [results.parsed.table.columns, errorThresholds, update]\n )\n\n const menuItems = fields.map(key => (\n setColumn(field, index)}\n selected={key === threshold?.field}\n title={key}\n >\n {key}\n \n ))\n\n const menu = onCollapse => (\n {menuItems}\n )\n\n const menuButton = (active, onClick) => (\n \n {threshold?.field || 'Select a field'}\n \n )\n return \n}\n\nexport default FieldColumnDropdown\n","// Libraries\nimport React, {FC, useCallback, useContext, useMemo} from 'react'\n\n// Components\nimport {ComponentSize, ComponentStatus, Dropdown} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {event} from 'src/cloud/utils/reporting'\nimport {\n COMMON_THRESHOLD_TYPES,\n EQUALITY_THRESHOLD_TYPES,\n ErrorThreshold,\n ThresholdFormat,\n} from 'src/flows/pipes/Visualization/threshold'\n\ntype Props = {\n threshold: ErrorThreshold\n index: number\n}\nconst FunctionDropdown: FC = ({threshold, index}) => {\n const {data, update} = useContext(PipeContext)\n\n const errorThresholds = useMemo(\n () => data?.errorThresholds ?? [],\n [data?.errorThresholds]\n )\n\n const setThresholdType = useCallback(\n (type, index) => {\n if (!COMMON_THRESHOLD_TYPES[type]) {\n return\n }\n\n event('Changed Error Threshold', {type})\n\n const threshold = errorThresholds.find((_, i) => index === i)\n\n if (!threshold) {\n return\n }\n\n threshold.type = type\n threshold.field = threshold.field || '_value'\n\n if (COMMON_THRESHOLD_TYPES[type].format === ThresholdFormat.Range) {\n threshold.min = 0\n threshold.max = 100\n delete threshold.value\n } else {\n threshold.value = 20\n }\n update({errorThresholds})\n },\n [errorThresholds, update]\n )\n\n const THRESHOLD_TYPES =\n threshold?.fieldType === 'number'\n ? COMMON_THRESHOLD_TYPES\n : EQUALITY_THRESHOLD_TYPES\n\n const menuItems = Object.entries(THRESHOLD_TYPES).map(([key, value]) => (\n setThresholdType(type, index)}\n selected={key === threshold?.type}\n title={value.name}\n >\n {value?.name}\n \n ))\n const menu = onCollapse => (\n {menuItems}\n )\n const menuButton = (active, onClick) => (\n \n {COMMON_THRESHOLD_TYPES[threshold?.type]?.name || 'Select a function'}\n \n )\n return \n}\n\nexport default FunctionDropdown\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./ErrorThresholds.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {ChangeEvent, FC, useContext, useMemo} from 'react'\n\n// Components\nimport {\n ComponentSize,\n Input,\n InputType,\n FlexBox,\n FlexDirection,\n TextBlock,\n} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {event} from 'src/cloud/utils/reporting'\nimport {\n COMMON_THRESHOLD_TYPES,\n ErrorThreshold,\n ThresholdFormat,\n} from 'src/flows/pipes/Visualization/threshold'\nimport './ErrorThresholds.scss'\n\ntype Props = {\n threshold: ErrorThreshold\n index: number\n}\n\nconst ThresholdEntryColumn: FC = ({threshold, index}) => {\n const {data, update} = useContext(PipeContext)\n\n const errorThresholds = useMemo(\n () => data?.errorThresholds ?? [],\n [data?.errorThresholds]\n )\n\n const updateMin = (event: ChangeEvent, index: number) => {\n const threshold = errorThresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.min = Number(event.target.value)\n }\n\n update({errorThresholds})\n }\n\n const updateMax = (event: ChangeEvent, index: number) => {\n const threshold = errorThresholds.find((_, i) => index === i)\n\n if (threshold) {\n threshold.max = Number(event.target.value)\n }\n\n update({errorThresholds})\n }\n\n const updateValue = (\n changeEvent: ChangeEvent,\n index: number\n ) => {\n event('Alert Panel (Notebooks) - Threshold Value Entered')\n const threshold = errorThresholds.find((_, i) => index === i)\n if (!threshold) {\n return\n }\n\n threshold.value = changeEvent.target.value\n\n update({errorThresholds})\n }\n\n let body = (\n updateValue(event, index)}\n size={ComponentSize.Medium}\n />\n )\n\n if (\n COMMON_THRESHOLD_TYPES[threshold?.type]?.format === ThresholdFormat.Range\n ) {\n body = (\n <>\n updateMin(event, index)}\n size={ComponentSize.Medium}\n />\n \n updateMax(event, index)}\n size={ComponentSize.Medium}\n />\n \n )\n }\n\n return (\n \n {body}\n \n )\n}\n\nexport default ThresholdEntryColumn\n","// Libraries\nimport React, {FC, useContext, useMemo} from 'react'\n\n// Components\nimport {\n AlignItems,\n Button,\n ComponentColor,\n ComponentSize,\n ComponentStatus,\n IconFont,\n FlexBox,\n FlexDirection,\n Form,\n TextBlock,\n} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport ColumnDropdown from 'src/flows/pipes/Visualization/ErrorThresholds/FieldColumnDropdown'\nimport FunctionDropdown from 'src/flows/pipes/Visualization/ErrorThresholds/FunctionDropdown'\nimport ThresholdEntryColumn from 'src/flows/pipes/Visualization/ErrorThresholds/ThresholdEntryColumn'\nimport {event} from 'src/cloud/utils/reporting'\nimport {ErrorThreshold} from 'src/flows/pipes/Visualization/threshold'\nimport './ErrorThresholds.scss'\n\nconst ErrorThresholds: FC = () => {\n const {data, results, update} = useContext(PipeContext)\n\n const fields = Array.from(\n new Set(results.parsed.table.columns['_field']?.data as string[])\n )\n\n const errorThresholds = useMemo(\n () => data?.errorThresholds ?? [],\n [data?.errorThresholds]\n )\n\n const handleAddThreshold = () => {\n event('Error Threshold Added to Visualization Panel')\n update({\n errorThresholds: [\n ...(errorThresholds ?? []),\n {\n type: 'equal',\n value: 0,\n fieldType: 'not-number',\n },\n ],\n })\n }\n\n const handleRemoveThreshold = (index: number) => {\n const copy = errorThresholds.slice()\n copy.splice(index, 1)\n\n update({\n errorThresholds: copy,\n })\n }\n\n return (\n \n \n \n {data?.errorThresholds?.map(\n (threshold: ErrorThreshold, index: number) => (\n \n \n \n \n \n \n \n \n \n \n \n \n handleRemoveThreshold(index)}\n color={ComponentColor.Tertiary}\n />\n \n )\n )}\n \n \n 0\n ? ComponentStatus.Default\n : ComponentStatus.Disabled\n }\n onClick={handleAddThreshold}\n color={ComponentColor.Primary}\n className=\"add-error-threshold--button\"\n />\n \n \n \n )\n}\n\nexport default ErrorThresholds\n","import React, {FC, useContext, useCallback, useEffect} from 'react'\nimport {\n ComponentColor,\n ComponentStatus,\n IconFont,\n DapperScrollbars,\n Button,\n} from '@influxdata/clockface'\nimport {millisecondsToDuration} from 'src/shared/utils/duration'\nimport {\n SUPPORTED_VISUALIZATIONS,\n ViewTypeDropdown,\n ViewOptions,\n} from 'src/visualization'\nimport {ViewType} from 'src/types'\nimport {event} from 'src/cloud/utils/reporting'\nimport ErrorThresholds from 'src/flows/pipes/Visualization/ErrorThresholds/ErrorThresholds'\nimport {SidebarContext} from 'src/flows/context/sidebar'\nimport {PipeContext, PipeProvider} from 'src/flows/context/pipe'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\n\nconst WrappedViewOptions: FC = () => {\n const {data, update, results} = useContext(PipeContext)\n\n const updateProperties = useCallback(\n properties => {\n update({\n properties: {\n ...data.properties,\n ...properties,\n },\n })\n },\n [data.properties, update]\n )\n\n return (\n \n \n \n \n \n \n )\n}\n\nconst Controls: FC = () => {\n const {id, data, range, update, results} = useContext(PipeContext)\n const {hideSub, id: showId, show, showSub} = useContext(SidebarContext)\n\n const updateType = (type: ViewType) => {\n event('notebook_change_visualization_type', {\n viewType: type,\n })\n\n update({\n properties: SUPPORTED_VISUALIZATIONS[type].initial,\n })\n }\n\n const launcher = () => {\n if (id === showId) {\n hideSub()\n } else {\n show(id)\n showSub(\n \n \n \n )\n }\n }\n\n useEffect(() => {\n let period\n if (range.type === 'custom') {\n period = millisecondsToDuration(\n Math.round((Date.parse(range.upper) - Date.parse(range.lower)) / 360)\n )\n } else if (range.type === 'selectable-duration') {\n period = millisecondsToDuration(range.windowPeriod)\n }\n\n if (period && period !== data.period) {\n update({\n period,\n })\n }\n }, [range, update, data.period])\n\n const dataExists = results.parsed && Object.entries(results.parsed).length\n\n const toggler = (\n \n )\n\n if (data.properties.type === 'simple-table') {\n return (\n <>\n \n Limited to most recent 100 results per series\n \n \n {toggler}\n \n )\n }\n\n return (\n <>\n \n {toggler}\n \n )\n}\n\nexport default Controls\n","// Libraries\nimport React, {FC, useCallback, useContext, useEffect, useMemo} from 'react'\nimport QRComponent from 'src/flows/pipes/Visualization/QRCode'\n\n// Components\nimport {\n AlignItems,\n ComponentSize,\n FlexBox,\n FlexDirection,\n Icon,\n IconFont,\n JustifyContent,\n} from '@influxdata/clockface'\nimport Controls from 'src/flows/pipes/Visualization/Controls'\n\n// Utilities\nimport {View} from 'src/visualization'\n\n// Types\nimport {RemoteDataState} from 'src/types'\nimport {Columns, PipeProp} from 'src/types/flows'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {SidebarContext} from 'src/flows/context/sidebar'\n\nimport {event} from 'src/cloud/utils/reporting'\nimport {downloadTextFile} from 'src/shared/utils/download'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\nimport {LINE_COLORS_SOLID_WHITE} from 'src/shared/constants/graphColorPalettes'\nimport {downloadImage} from 'src/shared/utils/download'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\n\n// Enable map background\nconst canvasOption = {\n useCORS: true,\n}\n\nconst downloadAsImage = (pipeID: string) => {\n const canvas = document.getElementById(pipeID)\n import('html2canvas').then((module: any) =>\n module.default(canvas as HTMLDivElement, canvasOption).then(result => {\n downloadImage(result.toDataURL(), 'visualization.png')\n })\n )\n}\n\nconst downloadAsPDF = (pipeID: string) => {\n const canvas = document.getElementById(pipeID)\n import('html2canvas').then((module: any) =>\n module.default(canvas as HTMLDivElement, canvasOption).then(result => {\n import('jspdf').then((jsPDF: any) => {\n const doc = new jsPDF.default({\n orientation: 'l',\n unit: 'pt',\n format: [result.width, result.height],\n })\n doc.addImage(\n result.toDataURL('image/png'),\n 'PNG',\n 0,\n 0,\n result.width,\n result.height\n )\n doc.save('visualization.pdf')\n })\n })\n )\n}\n\nconst Visualization: FC = ({Context}) => {\n const {id, data, range, loading, results} = useContext(PipeContext)\n const {basic, getPanelQueries} = useContext(FlowQueryContext)\n const {register} = useContext(SidebarContext)\n\n const dataExists = !!(results?.parsed?.table || []).length\n\n const download = () => {\n event('CSV Download Initiated')\n const query = getPanelQueries(id)\n basic(query?.source, query?.scope).promise.then(response => {\n if (response.type !== 'SUCCESS') {\n return\n }\n\n downloadTextFile(response.csv, 'influx.data', '.csv', 'text/csv')\n })\n }\n\n const loadingText = useMemo(() => {\n if (loading === RemoteDataState.Loading) {\n return 'Loading'\n }\n\n if (loading === RemoteDataState.NotStarted) {\n return UNPROCESSED_PANEL_TEXT\n }\n\n return 'No Data Returned'\n }, [loading])\n\n const getValueColumn = useCallback((columns: Columns) => {\n return Object.values(columns).filter(column => column.name === '_value')\n }, [])\n\n useEffect(() => {\n if (!id) {\n return\n }\n\n register(id, [\n {\n title: 'Visualization',\n actions: [\n {\n title: 'Download as CSV',\n disable: !dataExists,\n action: download,\n },\n {\n title: 'Download as Image',\n action: () => downloadAsImage(id),\n hidden: !isFlagEnabled('pdfImageDownload'),\n disable: !dataExists,\n },\n {\n title: 'Download as PDF',\n action: () => downloadAsPDF(id),\n hidden: !isFlagEnabled('pdfImageDownload'),\n disable: !dataExists,\n },\n ],\n },\n ])\n }, [id, data.properties, results.parsed, range])\n\n if (results.error) {\n return (\n }>\n
\n
\n \n
\n
{results.error}
\n
\n
\n )\n }\n\n if (!dataExists) {\n return (\n }>\n
\n
\n \n
\n
\n
{loadingText}
\n
\n
\n
\n )\n }\n\n if (data?.errorThresholds?.length > 0) {\n const fieldIndices = {}\n\n data?.errorThresholds.forEach(threshold => {\n fieldIndices[threshold.field] = {\n type: threshold.type,\n value: threshold.value,\n fieldType: threshold.fieldType,\n }\n if (threshold.min) {\n fieldIndices[threshold.field].min = threshold.min\n }\n if (threshold.max) {\n fieldIndices[threshold.field].max = threshold.max\n }\n })\n\n const {columns} = results.parsed.table\n\n let triggeredErrorThresholdMessage = ''\n const fields: any[] = columns['_field']?.data ?? []\n\n const values = getValueColumn(columns)\n\n const realValues = fields.map((_, index) =>\n values.reduce((acc, curr) => {\n if (curr.data[index] != null) {\n return curr.data[index]\n }\n return acc\n }, undefined)\n )\n\n for (let i = 0; i < fields.length - 1; i++) {\n const field = fields[i]\n if (fieldIndices[`${field}`]) {\n // find the value based on the indices\n const value = realValues[i]\n let thresholdValue = fieldIndices[`${field}`]?.value\n const fieldType = fieldIndices[`${field}`]?.fieldType\n\n if (fieldType === 'number') {\n thresholdValue = Number(thresholdValue)\n }\n\n const min = Number(fieldIndices[`${field}`].min)\n const max = Number(fieldIndices[`${field}`].max)\n const type = fieldIndices[`${field}`].type\n\n switch (type) {\n case 'between':\n if (value > min && value < max) {\n triggeredErrorThresholdMessage = `${field} is between ${min} and ${max}`\n }\n break\n case 'not-between':\n if (!(value > min && value < max)) {\n triggeredErrorThresholdMessage = `${field} is not between ${min} and ${max}`\n }\n break\n case 'not-equal':\n if (value !== thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is not equal to ${thresholdValue}`\n }\n break\n case 'equal':\n if (value === thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is equal to ${thresholdValue}`\n }\n break\n case 'less-equal':\n if (value <= thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is less than or equal to ${thresholdValue}`\n }\n break\n case 'less':\n if (value < thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is less than ${thresholdValue}`\n }\n break\n case 'greater-equal':\n if (value >= thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is greater than or equal to ${thresholdValue}`\n }\n break\n case 'greater':\n if (value > thresholdValue) {\n triggeredErrorThresholdMessage = `${field} is greater than ${thresholdValue}`\n }\n break\n default:\n break\n }\n }\n\n if (triggeredErrorThresholdMessage) {\n break\n }\n }\n\n if (triggeredErrorThresholdMessage) {\n // show the QR code if it exists\n const url = new URL(\n `${window.location.origin}${window.location.pathname}?panel=${id}`\n ).toString()\n\n return (\n } resizes>\n \n
\n \n \n \n
\n \n \n
\n {triggeredErrorThresholdMessage}\n
\n \n \n \n \n
\n )\n }\n }\n\n return (\n } resizes>\n
\n
\n \n \n \n
\n
\n
\n )\n}\n\nexport default Visualization\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport './style.scss'\nimport {parse} from '@influxdata/flux-lsp-browser'\nimport {parseQuery} from 'src/shared/contexts/query'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nimport {SUPPORTED_VISUALIZATIONS} from 'src/visualization'\n\nexport default register => {\n register({\n type: 'visualization',\n family: 'passThrough',\n component: View,\n button: 'Graph',\n initial: {\n properties: SUPPORTED_VISUALIZATIONS['xy'].initial,\n },\n visual: (data, query) => {\n if (!query) {\n return ''\n }\n\n try {\n const ast = isFlagEnabled('fastFlows')\n ? parseQuery(query)\n : parse(query)\n if (!ast.body.length) {\n return ''\n }\n } catch {\n return ''\n }\n\n if (data.properties.type === 'simple-table') {\n return `${query} |> limit(n: 100)`\n }\n\n if (\n data.properties.type === 'single-stat' ||\n data.properties.type === 'gauge'\n ) {\n return `${query} |> last()`\n }\n\n return query\n },\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {GeoViewProperties} from 'src/types'\nimport {DEFAULT_THRESHOLDS_GEO_COLORS} from 'src/shared/constants/thresholds'\n\nexport default {\n type: 'geo',\n queries: [\n {\n text: '',\n editMode: 'builder',\n name: '',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n shape: 'chronograf-v2',\n center: {\n lat: 0,\n lon: 0,\n },\n zoom: 0,\n allowPanAndZoom: true,\n detectCoordinateFields: false,\n mapStyle: '',\n note: '',\n showNoteWhenEmpty: false,\n layers: [\n {\n type: 'pointMap',\n colorDimension: {label: 'Value'},\n colorField: '_value',\n colors: DEFAULT_THRESHOLDS_GEO_COLORS,\n isClustered: false,\n tooltipColumns: [],\n },\n ],\n useS2CellID: true,\n s2Column: '',\n latLonColumns: {lat: {key: '', column: ''}, lon: {key: '', column: ''}},\n} as GeoViewProperties\n","// Libraries\nimport React, {FC, useEffect, useState} from 'react'\nimport {Config, Plot} from '@influxdata/giraffe'\nimport {RemoteDataState} from '@influxdata/clockface'\nimport {isEmpty} from 'lodash'\n\n// Types\nimport {GeoViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n// Utils\nimport {getGeoCoordinates} from 'src/shared/utils/vis'\nimport {event} from 'src/cloud/utils/reporting'\nimport {CLOUD} from 'src/shared/constants'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nlet getMapToken = null\n\nif (CLOUD) {\n getMapToken = require('src/client/mapsdRoutes').getMapToken\n if (isFlagEnabled('uiproxyd')) {\n getMapToken = require('src/client/uiproxydRoutes').getMapToken\n }\n}\n\ninterface Props extends VisualizationProps {\n properties: GeoViewProperties\n}\n\ntype GeoCoordinates = {\n lat: number\n lon: number\n}\n\nconst GeoPlot: FC = ({result, properties}) => {\n const {\n layers,\n zoom,\n allowPanAndZoom,\n mapStyle,\n useS2CellID,\n s2Column,\n latLonColumns,\n } = properties\n const {lat, lon} = properties.center\n\n const [mapServiceError, setMapServiceError] = useState(\n RemoteDataState.NotStarted\n )\n const [mapToken, setMapToken] = useState('')\n const [coordinateError, setCoordinateError] = useState(\n RemoteDataState.NotStarted\n )\n const [geoCoordinates, setGeoCoordinates] = useState({\n lat,\n lon,\n })\n\n useEffect(() => {\n const token = properties?.layers?.find(\n layer => layer?.tileServerConfiguration?.tileServerUrl\n )\n if (CLOUD && token) {\n setMapServiceError(RemoteDataState.Done)\n setMapToken(token.tileServerConfiguration?.tileServerUrl)\n }\n if (CLOUD && !token) {\n const getToken = async () => {\n try {\n setMapServiceError(RemoteDataState.Loading)\n const resp = await getMapToken({})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n setMapToken(resp.data.token)\n setMapServiceError(RemoteDataState.Done)\n event('mapplot.map_token_request.success')\n } catch (err) {\n setMapServiceError(RemoteDataState.Error)\n event('mapplot.map_token_request.failure')\n }\n }\n getToken()\n }\n }, [properties.layers])\n\n useEffect(() => {\n try {\n setCoordinateError(RemoteDataState.Loading)\n if (CLOUD) {\n const coordinates = getGeoCoordinates(\n result.table,\n 0,\n useS2CellID,\n s2Column,\n latLonColumns\n )\n setGeoCoordinates(coordinates)\n }\n\n setCoordinateError(RemoteDataState.Done)\n event('mapplot.get_geo_coordinates.success')\n } catch (err) {\n setCoordinateError(RemoteDataState.Error)\n event('mapplot.get_geo_coordinates.failure')\n }\n }, [useS2CellID, s2Column, latLonColumns, result.table])\n\n let error = ''\n\n const getMapboxUrl = () => {\n if (mapToken) {\n return `https://api.mapbox.com/styles/v1/influxdata/cklspghhd1opp17mmz0yk7rcy/tiles/256/{z}/{x}/{y}@2x?access_token=${mapToken}`\n }\n return ''\n }\n\n if (\n mapServiceError === RemoteDataState.NotStarted ||\n coordinateError === RemoteDataState.NotStarted ||\n mapServiceError === RemoteDataState.Loading ||\n coordinateError === RemoteDataState.Loading\n ) {\n return null\n }\n\n if (mapServiceError === RemoteDataState.Error) {\n error =\n 'We are having issues connecting to the Maps Server. Please try again later'\n\n return (\n
\n {error}\n
\n )\n } else if (coordinateError === RemoteDataState.Error) {\n error =\n 'Map type is not supported with the data provided. Please use customization options to select correct fields to use for lat/lon'\n\n return (\n
\n {error}\n
\n )\n }\n\n const tileServerConfiguration = {\n tileServerUrl: getMapboxUrl(),\n bingKey: '',\n }\n\n let layersOpts = layers\n if (!layers.length) {\n layersOpts = [\n {\n type: 'pointMap',\n colorDimension: {label: 'Value'},\n colorField: '_value',\n colors: [],\n isClustered: false,\n tooltipColumns: [],\n },\n ]\n }\n\n const tooltipColumns = isEmpty(layersOpts[0].tooltipColumns)\n ? result.fluxGroupKeyUnion\n : layersOpts[0].tooltipColumns\n\n layersOpts[0] = {...layersOpts[0], tooltipColumns}\n\n let zoomOpt = zoom\n if (zoom === 0) {\n zoomOpt = 6\n }\n\n let config: Config\n\n if (CLOUD) {\n config = {\n table: result.table,\n showAxes: false,\n layers: [\n {\n type: 'geo',\n lat: geoCoordinates.lat,\n lon: geoCoordinates.lon,\n zoom: zoomOpt,\n allowPanAndZoom,\n detectCoordinateFields: true,\n mapStyle,\n layers: layersOpts,\n tileServerConfiguration: tileServerConfiguration,\n useS2CellID: useS2CellID,\n s2Column: s2Column,\n latLonColumns: latLonColumns,\n },\n ],\n }\n }\n\n return \n}\n\nexport default GeoPlot\n","import {ColumnData, Table} from '@influxdata/giraffe'\nimport _ from 'lodash'\n\nexport const findTags = (table: Table, latLon: boolean = false) => {\n return table.columnKeys.reduce((acc, k) => {\n const columnType = table.getColumnType(k)\n if (columnType === 'time') {\n return acc\n }\n\n if (\n k === '_measurement' ||\n k === 'id' ||\n k === '_field' ||\n k === 'result'\n ) {\n return acc\n }\n if (latLon && k === 's2_cell_id') {\n return acc\n }\n\n return {\n ...acc,\n [k]: {\n key: 'tag',\n column: table.getColumnName(k),\n },\n }\n }, {})\n}\n\nexport const findFields = (table: Table) => {\n const results = {}\n\n const fieldValues: ColumnData = table.getColumn('_field')\n if (fieldValues) {\n const fields = new Set([...fieldValues])\n fields.forEach((field: string) => {\n results[field] = {\n key: 'field',\n column: field,\n }\n })\n }\n\n return results\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./GeoOptions.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC} from 'react'\nimport {\n Dropdown,\n ComponentStatus,\n DropdownMenuTheme,\n} from '@influxdata/clockface'\nimport {GeoViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {findTags} from './utils'\nimport './GeoOptions.scss'\n\ninterface Props extends VisualizationOptionProps {\n properties: GeoViewProperties\n}\n\nexport const S2ColumnOptions: FC = ({properties, update, results}) => {\n const {s2Column} = properties\n\n const tags = findTags(results.table)\n\n const handleS2Select = (selection: string): void => {\n update({\n s2Column: selection,\n })\n }\n\n return (\n <>\n (\n \n {s2Column ? s2Column : 'Select S2 Column'}\n \n )}\n menu={onCollapse => (\n \n {Object.keys(tags).map(tag => {\n const tagValue = tags[tag]\n return (\n \n {tagValue.column}\n \n )\n })}\n \n )}\n />\n \n )\n}\n","import React, {FC} from 'react'\nimport {\n Dropdown,\n ComponentStatus,\n DropdownMenuTheme,\n} from '@influxdata/clockface'\nimport {GeoViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {findFields, findTags} from './utils'\nimport './GeoOptions.scss'\n\ninterface Props extends VisualizationOptionProps {\n properties: GeoViewProperties\n}\n\nexport const LatLonColumnOptions: FC = ({\n properties,\n update,\n results,\n}) => {\n const {latLonColumns} = properties\n\n const tagsAndFields = {\n ...findFields(results.table),\n ...findTags(results.table, true),\n }\n\n const handleLatSelect = (selection: string): void => {\n const latLonColumnOptions = {\n lat: selection,\n lon: latLonColumns.lon,\n }\n update({\n latLonColumns: latLonColumnOptions,\n })\n }\n\n const handleLonSelect = (selection: string): void => {\n const latLonColumnOptions = {\n lat: latLonColumns.lat,\n lon: selection,\n }\n update({\n latLonColumns: latLonColumnOptions,\n })\n }\n\n return (\n <>\n (\n \n {latLonColumns?.lat?.column !== ''\n ? latLonColumns.lat.column\n : 'Select Lat Column'}\n \n )}\n menu={onCollapse => (\n \n {Object.keys(tagsAndFields).map(tagAndField => {\n const value = tagsAndFields[tagAndField]\n return (\n \n {value.column}\n \n )\n })}\n \n )}\n />\n (\n \n {latLonColumns?.lon?.column !== ''\n ? latLonColumns.lon.column\n : 'Select Lon Column'}\n \n )}\n menu={onCollapse => (\n \n {Object.keys(tagsAndFields).map(tagAndField => {\n const value = tagsAndFields[tagAndField]\n return (\n \n {value.column}\n \n )\n })}\n \n )}\n />\n \n )\n}\n","import React, {CSSProperties, FC} from 'react'\n\nimport {\n Grid,\n Form,\n ComponentSize,\n InputLabel,\n FlexBox,\n FlexDirection,\n AlignItems,\n InfluxColors,\n SlideToggle,\n} from '@influxdata/clockface'\n\nimport ThresholdsSettings from 'src/visualization/components/internal/ThresholdsSettings'\n\nimport {GeoViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\nimport {S2ColumnOptions} from './S2ColumnOptions'\nimport './GeoOptions.scss'\nimport {LatLonColumnOptions} from './LatLonColumnOptions'\nimport {CLOUD} from 'src/shared/constants'\n\ninterface Props extends VisualizationOptionProps {\n properties: GeoViewProperties\n}\n\n// const mapTypeOptions = ['Point', 'Circle', 'Heat', 'Track']\nexport enum MapType {\n Point = 'pointMap',\n Circle = 'circleMap',\n Heat = 'heatmap',\n Track = 'trackMap',\n}\n\nexport const GeoOptions: FC = ({properties, update, results}) => {\n const {useS2CellID} = properties\n\n const handleSetUseS2CellID = (): void => {\n update({\n useS2CellID: !useS2CellID,\n })\n }\n\n const getToggleColor = (toggle: boolean): CSSProperties => {\n if (toggle) {\n return {color: InfluxColors.Grey95}\n }\n return {color: InfluxColors.Grey65}\n }\n\n return CLOUD ? (\n <>\n \n \n \n \n \n Use S2 Cell ID for lat/lon\n \n \n {useS2CellID ? (\n \n ) : (\n \n )}\n \n \n c.type !== 'scale'\n )}\n onSetThresholds={colors => {\n update({\n layers: [\n {\n type: 'pointMap',\n colorDimension: {label: 'Value'},\n colorField: '_value',\n colors: colors,\n isClustered: false,\n },\n ],\n })\n }}\n />\n \n \n \n ) : (\n \n

Customize Geo Options

\n

\n To display properly, your data will need to contain fields named 'lat'\n and 'lon' or a tag named 's2_cell_id'. For help customizing your query,\n please see our{' '}\n \n documentation\n \n

\n
\n )\n\n // const handleSelectGroupClick = (activeOption: string): void => {\n // switch (MapType[activeOption]) {\n // case 'pointMap':\n // update({\n // layers: [\n // {\n // type: 'pointMap',\n // colorDimension: {label: 'Value'},\n // colorField: '_value',\n // colors: [\n // {type: 'min', hex: InfluxColors.Star},\n // {value: 50, hex: InfluxColors.Star},\n // {type: 'max', hex: InfluxColors.Star},\n // ],\n // isClustered: false,\n // },\n // ],\n // })\n // break\n // case 'heatmap':\n // update({\n // layers: [\n // {\n // type: 'heatmap',\n // radius: 20,\n // blur: 10,\n // intensityDimension: {label: 'Lat'},\n // intensityField: 'lat',\n // colors: [\n // {type: 'min', hex: '#00ff00'},\n // {value: 50, hex: '#ffae42'},\n // {value: 60, hex: '#ff0000'},\n // {type: 'max', hex: '#ff0000'},\n // ],\n // },\n // ],\n // })\n // break\n // case 'trackMap':\n // update({\n // layers: [\n // {\n // type: 'trackMap',\n // speed: 200,\n // trackWidth: 4,\n // randomColors: false,\n // endStopMarkers: true,\n // endStopMarkerRadius: 4,\n // colors: [\n // {type: 'min', hex: '#0000FF'},\n // {type: 'max', hex: '#F0F0FF'},\n // ],\n // },\n // ],\n // })\n // break\n // case 'circleMap':\n // update({\n // layers: [\n // {\n // type: 'circleMap',\n // radiusField: 'lat',\n // radiusDimension: {label: 'lat'},\n // colorDimension: {label: 'lon'},\n // colorField: 'lon',\n // colors: [\n // {type: 'min', hex: '#ff00b3'},\n // {value: 50, hex: '#343aeb'},\n // {type: 'max', hex: '#343aeb'},\n // ],\n // },\n // ],\n // })\n // break\n // }\n // }\n}\n","import icon from 'src/visualization/types/Map/icon'\nimport properties from 'src/visualization/types/Map/properties'\nimport view from 'src/visualization/types/Map/view'\nimport {GeoOptions as options} from 'src/visualization/types/Map/GeoOptions'\nimport {CLOUD} from 'src/shared/constants'\n\nexport default register => {\n register({\n type: 'geo',\n name: 'Map',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n // Maps are not supported on OSS\n disabled: !CLOUD,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {TableViewProperties} from 'src/types'\nimport {DEFAULT_TABLE_COLORS} from '@influxdata/giraffe'\n\nexport default {\n type: 'table',\n shape: 'chronograf-v2',\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n tableOptions: {\n verticalTimeAxis: true,\n sortBy: null,\n fixFirstColumn: false,\n },\n colors: DEFAULT_TABLE_COLORS,\n fieldOptions: [],\n decimalPlaces: {\n isEnforced: false,\n digits: 2,\n },\n timeFormat: 'YYYY-MM-DD HH:mm:ss',\n note: '',\n showNoteWhenEmpty: false,\n} as TableViewProperties\n","// Libraries\nimport React, {Component, ChangeEvent} from 'react'\nimport {findDOMNode} from 'react-dom'\nimport {\n DragSourceSpec,\n DropTargetConnector,\n DragSourceMonitor,\n DragSource,\n DropTarget,\n DragSourceConnector,\n ConnectDragSource,\n ConnectDropTarget,\n ConnectDragPreview,\n} from 'react-dnd'\n\n// Components\nimport {Input, Icon} from '@influxdata/clockface'\n\n// Decorators\nimport {ErrorHandling} from 'src/shared/decorators/errors'\n\n// Types\nimport {ComponentStatus, IconFont} from '@influxdata/clockface'\nimport {FieldOption} from 'src/types'\n\n// Constants\nconst columnType = 'column'\n\ninterface Props {\n internalName: string\n displayName: string\n visible: boolean\n index: number\n id: string\n key: string\n onUpdateColumn: (column: FieldOption) => void\n isDragging?: boolean\n connectDragSource?: ConnectDragSource\n connectDropTarget?: ConnectDropTarget\n connectDragPreview?: ConnectDragPreview\n onMoveColumn: (dragIndex: number, hoverIndex: number) => void\n}\n\nconst columnSource: DragSourceSpec = {\n beginDrag(props) {\n return {\n id: props.id,\n index: props.index,\n }\n },\n}\n\nconst columnTarget = {\n hover(props, monitor, component) {\n const dragIndex = monitor.getItem().index\n const hoverIndex = props.index\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return\n }\n\n // Determine rectangle on screen\n const domNode = findDOMNode(component) as Element\n const hoverBoundingRect = domNode.getBoundingClientRect()\n\n // Get vertical middle\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2\n\n // Determine mouse position\n const clientOffset = monitor.getClientOffset()\n\n // Get pixels to the top\n const hoverClientY = clientOffset.y - hoverBoundingRect.top\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n\n // Dragging downwards\n if (dragIndex < hoverIndex && hoverClientY < hoverMiddleY) {\n return\n }\n\n // Dragging upwards\n if (dragIndex > hoverIndex && hoverClientY > hoverMiddleY) {\n return\n }\n // Time to actually perform the action\n props.onMoveColumn(dragIndex, hoverIndex)\n\n // Note: we're mutating the monitor item here!\n // Generally it's better to avoid mutations,\n // but it's good here for the sake of performance\n // to avoid expensive index searches.\n monitor.getItem().index = hoverIndex\n },\n}\n\nfunction ColumnDropTarget(dropColumnType, dropColumnTarget, dropHandler) {\n return target =>\n DropTarget(dropColumnType, dropColumnTarget, dropHandler)(target) as any\n}\n\nfunction ColumnDragSource(dragColumnType, dragColumnSource, dragHandler) {\n return target =>\n DragSource(dragColumnType, dragColumnSource, dragHandler)(target) as any\n}\n\n@ErrorHandling\n@ColumnDropTarget(columnType, columnTarget, (connect: DropTargetConnector) => ({\n connectDropTarget: connect.dropTarget(),\n}))\n@ColumnDragSource(\n columnType,\n columnSource,\n (connect: DragSourceConnector, monitor: DragSourceMonitor) => ({\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging(),\n })\n)\nexport default class DraggableColumn extends Component {\n constructor(props) {\n super(props)\n\n this.handleColumnRename = this.handleColumnRename.bind(this)\n this.handleToggleVisible = this.handleToggleVisible.bind(this)\n }\n public render(): JSX.Element | null {\n const {internalName, displayName, connectDragPreview, connectDropTarget} =\n this.props\n\n return connectDragPreview(\n connectDropTarget(\n
\n
\n {this.dragHandle}\n {this.visibilityToggle}\n
{internalName}
\n
\n \n
\n )\n )\n }\n\n private get inputStatus(): ComponentStatus {\n const {visible} = this.props\n\n if (visible) {\n return ComponentStatus.Default\n }\n\n return ComponentStatus.Disabled\n }\n\n private get dragHandle(): JSX.Element {\n const {connectDragSource} = this.props\n\n return connectDragSource(\n
\n \n
\n )\n }\n\n private get visibilityToggle(): JSX.Element {\n const {visible, internalName} = this.props\n\n if (visible) {\n return (\n \n \n \n )\n }\n\n return (\n \n \n \n )\n }\n\n private get labelClassName(): string {\n const {visible} = this.props\n\n if (visible) {\n return 'customizable-field--label'\n }\n\n return 'customizable-field--label__hidden'\n }\n\n private get columnClassName(): string {\n const {isDragging} = this.props\n\n if (isDragging) {\n return 'customizable-field dragging'\n }\n\n return 'customizable-field'\n }\n\n private handleColumnRename = (e: ChangeEvent): void => {\n const {onUpdateColumn, internalName, visible} = this.props\n onUpdateColumn({internalName, displayName: e.target.value, visible})\n }\n\n private handleToggleVisible = (): void => {\n const {onUpdateColumn, internalName, displayName, visible} = this.props\n onUpdateColumn({internalName, displayName, visible: !visible})\n }\n}\n","export const move = (values: T[], fromIndex: number, toIndex: number) => {\n if (fromIndex === toIndex) {\n return values.slice()\n }\n\n const targetValue = values[fromIndex]\n\n const valuesRemoved = [\n ...values.slice(0, fromIndex),\n ...values.slice(fromIndex + 1),\n ]\n\n return [\n ...valuesRemoved.slice(0, toIndex),\n targetValue,\n ...valuesRemoved.slice(toIndex),\n ]\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./options.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC, useMemo, useCallback} from 'react'\nimport HTML5Backend from 'react-dnd-html5-backend'\nimport {DndProvider} from 'react-dnd'\n\nimport {\n Input,\n InputType,\n InputLabel,\n Grid,\n Columns,\n Dropdown,\n Form,\n SelectGroup,\n SelectDropdown,\n ButtonShape,\n FlexBox,\n FlexDirection,\n ComponentSize,\n SlideToggle,\n AutoInput,\n AutoInputMode,\n EmptyState,\n} from '@influxdata/clockface'\n\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {\n THRESHOLD_TYPE_TEXT,\n THRESHOLD_TYPE_BG,\n} from 'src/shared/constants/thresholds'\nimport DraggableColumn from 'src/shared/components/draggable_column/DraggableColumn'\nimport {TableViewProperties, FieldOption} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {\n MIN_DECIMAL_PLACES,\n MAX_DECIMAL_PLACES,\n} from 'src/visualization/constants'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\nimport ThresholdsSettings from 'src/visualization/components/internal/ThresholdsSettings'\nimport {move} from 'src/shared/utils/move'\n\nimport './options.scss'\n\ninterface Props extends VisualizationOptionProps {\n properties: TableViewProperties\n}\n\nconst TableViewOptions: FC = ({properties, results, update}) => {\n const existing = (properties.fieldOptions || []).reduce((prev, curr) => {\n prev[curr.internalName] = curr\n return prev\n }, {})\n\n results.table.columnKeys\n .filter(o => !existing.hasOwnProperty(o))\n .filter(o => !['result', '', 'table', 'time'].includes(o))\n .forEach(o => {\n existing[o] = {\n internalName: o,\n displayName: o,\n visible: true,\n }\n })\n const fieldOptions = Object.keys(existing).map(e => existing[e])\n\n const setDigits = useCallback(\n (digits: number | null) => {\n update({\n decimalPlaces: {\n ...properties.decimalPlaces,\n digits,\n },\n })\n },\n [update, properties.decimalPlaces]\n )\n\n const handleChangeMode = useCallback(\n (mode: AutoInputMode): void => {\n if (mode === AutoInputMode.Auto) {\n setDigits(null)\n } else {\n setDigits(2)\n }\n },\n [setDigits]\n )\n\n const updateTableOptions = useCallback(\n tableOptions => {\n update({\n tableOptions: {\n ...properties.tableOptions,\n ...tableOptions,\n },\n })\n },\n [update, properties.tableOptions]\n )\n\n const updateThreshold = useCallback(\n (threshold: string) => {\n if (threshold === THRESHOLD_TYPE_BG) {\n update({\n colors: properties.colors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type: THRESHOLD_TYPE_BG,\n }\n }\n\n return color\n }),\n })\n } else {\n update({\n colors: properties.colors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type: THRESHOLD_TYPE_TEXT,\n }\n }\n\n return color\n }),\n })\n }\n },\n [update, properties.colors]\n )\n\n const shouldSeeColumn = column =>\n column.internalName !== 'time' &&\n column.internalName !== '' &&\n column.internalName !== 'result' &&\n column.internalName !== 'table'\n\n const updateColumn = useCallback(\n (fieldOption: FieldOption) => {\n update({\n fieldOptions: fieldOptions.map(option => {\n if (option.internalName !== fieldOption.internalName) {\n return option\n }\n\n return {\n ...fieldOption,\n }\n }),\n })\n },\n [update, fieldOptions]\n )\n\n const moveColumn = useCallback(\n (dragIndex: number, hoverIndex: number) => {\n update({\n fieldOptions: move(\n fieldOptions.filter(shouldSeeColumn),\n dragIndex,\n hoverIndex\n ),\n })\n },\n [update, fieldOptions]\n )\n\n const activeSetting =\n properties.colors.filter(color => color.type !== 'scale')[0]?.type || 'text'\n\n const draggableColumns = useMemo(\n () =>\n fieldOptions\n .filter(shouldSeeColumn)\n .map((column: FieldOption, idx: number) => (\n \n )),\n [fieldOptions]\n )\n\n return (\n \n \n \n
Formatting
\n \n (\n \n {properties.tableOptions?.sortBy?.displayName ||\n 'Choose a sort field'}\n \n )}\n menu={onCollapse => (\n \n {fieldOptions\n .filter(field => !!field.internalName)\n .map(field => (\n {\n updateTableOptions({\n sortBy,\n })\n }}\n selected={\n field.internalName ===\n properties.tableOptions?.sortBy?.internalName\n }\n >\n {field.displayName}\n \n ))}\n \n )}\n />\n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(timeFormat: string) => {\n update({timeFormat})\n }}\n />\n \n \n {\n setDigits(convertUserInputToNumOrNaN(evt))\n }}\n value={properties.decimalPlaces.digits}\n min={MIN_DECIMAL_PLACES}\n max={MAX_DECIMAL_PLACES}\n type={InputType.Number}\n />\n }\n />\n \n
Colorized Thresholds
\n {\n update({colors})\n }}\n />\n \n \n \n Background\n \n \n Text\n \n \n \n
\n \n
Column Settings
\n \n \n \n Scroll with table\n {\n updateTableOptions({\n fixFirstColumn: !properties.tableOptions.fixFirstColumn,\n })\n }}\n size={ComponentSize.ExtraSmall}\n />\n Fixed\n \n \n \n \n \n
\n {!draggableColumns.length ? (\n \n \n \n This query returned no columns\n \n \n \n ) : (\n draggableColumns\n )}\n
\n
\n
\n
\n
\n
\n )\n}\n\nexport default TableViewOptions\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Utils\nimport {AppSettingContext} from 'src/shared/contexts/app'\nimport {parseFromFluxResults} from 'src/timeMachine/utils/rawFluxDataTable'\n\n// Types\nimport {TableViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\nimport {Config, HoverTimeProvider, Plot} from '@influxdata/giraffe'\n\ninterface Props extends VisualizationProps {\n properties: TableViewProperties\n}\n\nconst TableGraphs: FC = ({properties, result}) => {\n const {theme} = useContext(AppSettingContext)\n\n const {timeZone} = useContext(AppSettingContext)\n const parsed = parseFromFluxResults(result)\n const fluxResponse = parsed.tableData.join('\\n')\n const config: Config = {\n fluxResponse,\n layers: [\n {\n type: 'table',\n properties,\n timeZone: timeZone,\n tableTheme: theme,\n },\n ],\n }\n return (\n \n \n \n )\n}\n\nexport default TableGraphs\n","import {FromFluxResult} from '@influxdata/giraffe'\n\nexport const parseFromFluxResults = (\n parsedChunk: FromFluxResult\n): {tableData: string[][]; max: number} => {\n const {\n fluxGroupKeyUnion,\n table,\n table: {columnKeys: keys},\n } = parsedChunk\n\n const columnKeys = [\n 'result',\n 'table',\n ...keys.filter(k => k !== 'result' && k !== 'table'),\n ]\n\n const tables = table.getColumn('table')\n const values = table.getColumn('result')\n let currVal = null\n let currTable = null\n let columnHeaders = []\n const tableData = []\n let rowData: any[] = []\n let rowType: any\n let originalType: any\n let columnData: any\n let column: any\n const groupSet = new Set(fluxGroupKeyUnion)\n let max = 0\n\n // checks whether the string is valid JSON object or not\n const isJsonObject = jsonString => {\n try {\n const object = JSON.parse(jsonString)\n if (object && typeof object === 'object') {\n return true\n }\n } catch {}\n\n return false\n }\n\n for (let i = 0; i < tables.length; i++) {\n if (values[i] !== currVal || tables[i] !== currTable) {\n // sets the boundaries for the chunk based on different yields or tables\n currVal = values[i]\n currTable = tables[i]\n // build out the columnHeader = chunk[3]\n columnHeaders = columnKeys.filter(col => {\n const columnType: any = table.getColumnType(col)\n const values = table.getColumn(col, columnType)\n return values[i] !== undefined\n })\n // based on the columnHeader we can get the:\n // #datatype, 'string', 'long' ...(chunk[1])\n const dataTypes = ['#datatype']\n // #default, result, '', '' ...(chunk[2])\n const defaultRow = ['#default', `${values[i]}`]\n // #group, true, false ...(chunk[0])\n const groupHeaders = ['#group']\n let curr\n tableData.push([], groupHeaders, dataTypes, defaultRow, [\n '',\n ...columnHeaders,\n ])\n for (let j = 0; j < columnHeaders.length; j++) {\n curr = columnHeaders[j]\n groupHeaders.push(`${groupSet.has(curr)}`)\n dataTypes.push(table.getOriginalColumnType(curr))\n }\n max = Math.max(groupHeaders.length, dataTypes.length, max)\n }\n rowData = ['']\n for (let index = 0; index < columnHeaders.length; index++) {\n column = columnHeaders[index]\n rowType = table.getColumnType(column)\n originalType = table.getOriginalColumnType(column)\n columnData = table.getColumn(column, rowType)[i]\n if (\n originalType === 'dateTime:RFC3339' &&\n typeof columnData === 'number' &&\n !isNaN(columnData)\n ) {\n columnData = new Date(columnData).toISOString()\n }\n\n // (Sahas):\n // the columnData can have a comma (,) in two cases\n // 1. it's a JSON Object\n // 2. It's a string of CSV\n if (isJsonObject(columnData)) {\n // 1. replace Double quotes \\\" with Single quotes \\' in a json object\n // 2. then wrap the JSON object in double quotes\n columnData = `\"${columnData.replace(/['\"]+/g, \"'\")}\"`\n } else if (typeof columnData === 'string' && columnData.includes(',')) {\n columnData = `\"${columnData}\"`\n }\n if (column === 'result') {\n // setting the column data for result as an empty string since the default\n // value given is set in the default headers:\n // https://github.com/influxdata/flux/blob/master/docs/SPEC.md#response-format\n columnData = ''\n }\n rowData.push(`${columnData}`)\n }\n // construct the chunk of data for this given row\n tableData.push(rowData)\n }\n // this removes the unnecessary [] that's prepended to the table\n tableData.shift()\n return {tableData, max}\n}\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'table',\n name: 'Table',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\n\nimport {Axis, Base, Color, XYViewProperties} from 'src/types'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n STATIC_LEGEND_SHOW_DEFAULT,\n STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} from 'src/visualization/constants'\n\nexport default {\n type: 'xy',\n shape: 'chronograf-v2',\n geom: 'line',\n xColumn: null,\n yColumn: null,\n position: 'overlaid',\n hoverDimension: 'auto',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: DEFAULT_LINE_COLORS as Color[],\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n staticLegend: {\n colorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity: LEGEND_OPACITY_DEFAULT,\n orientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show: STATIC_LEGEND_SHOW_DEFAULT,\n widthRatio: STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n },\n\n note: '',\n showNoteWhenEmpty: false,\n\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10' as Base,\n scale: 'linear',\n } as Axis,\n },\n\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n} as XYViewProperties\n","// Libraries\nimport React, {CSSProperties, FC} from 'react'\n\n// Components\nimport {\n AlignItems,\n ComponentSize,\n FlexBox,\n FlexDirection,\n InfluxColors,\n InputLabel,\n QuestionMarkTooltip,\n SlideToggle,\n} from '@influxdata/clockface'\nimport {SafeBlankLink} from 'src/utils/SafeBlankLink'\n\n// Metrics\nimport {event} from 'src/cloud/utils/reporting'\n\ninterface AdaptiveZoomToggleProps {\n adaptiveZoomHide: boolean\n update: (obj: any) => void\n testID?: string\n type: string\n}\n\nconst getToggleColor = (toggle: boolean): CSSProperties => {\n if (toggle) {\n return {color: InfluxColors.Grey95}\n }\n return {color: InfluxColors.Grey65}\n}\n\nconst adaptiveZoomTooltipStyle = {\n maxWidth: '40%',\n padding: '2px 18px',\n}\n\nconst adaptiveZoomTooltip = (\n
\n

\n When enabled, will re-query on the selected domain upon zooming in on the\n graph. The window period will be the auto or custom window period\n selected.\n

\n

\n \n Learn about window period\n \n

\n
\n)\n\nexport const AdaptiveZoomToggle: FC = ({\n adaptiveZoomHide,\n update,\n type,\n}) => {\n const handleSetAdaptiveZoom = () => {\n update({\n adaptiveZoomHide: !adaptiveZoomHide,\n })\n event(`visualization.customize.adaptiveZoom.${!adaptiveZoomHide}`, {\n type,\n })\n }\n\n return (\n \n \n \n Adaptive Zoom\n \n \n \n )\n}\n","// Libraries\nimport React, {FC, useMemo} from 'react'\nimport {\n Input,\n Grid,\n Columns,\n Form,\n SelectDropdown,\n SelectGroup,\n Dropdown,\n ComponentStatus,\n ButtonShape,\n} from '@influxdata/clockface'\nimport {createGroupIDColumn} from '@influxdata/giraffe'\n\nimport {AXES_SCALE_OPTIONS} from 'src/visualization/constants'\n\n// Utils\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {\n defaultXColumn,\n defaultYColumn,\n parseYBounds,\n} from 'src/shared/utils/vis'\nimport {generateSeriesToColorHex} from 'src/visualization/utils/colorMappingUtils'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Components\nimport {AdaptiveZoomToggle} from 'src/visualization/components/internal/AdaptiveZoomOption'\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport ColorSchemeDropdown from 'src/visualization/components/internal/ColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport StaticLegend from 'src/visualization/components/internal/StaticLegend'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\nimport Checkbox from 'src/shared/components/Checkbox'\nimport {XYViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\nconst {BASE_2, BASE_10} = AXES_SCALE_OPTIONS\n\ninterface Props extends VisualizationOptionProps {\n properties: XYViewProperties\n}\n\nconst GraphViewOptions: FC = ({properties, results, update}) => {\n const numericColumns = (results?.table?.columnKeys || []).filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const groupKey = useMemo(\n () => [...results.fluxGroupKeyUnion, 'result'],\n [results]\n )\n\n const xColumn = defaultXColumn(results?.table, properties.xColumn)\n const yColumn = defaultYColumn(results?.table, properties.yColumn)\n const getGeomLabel = (geom: string): string => {\n switch (geom) {\n case 'monotoneX':\n return 'Smooth'\n case 'step':\n return 'Step'\n case 'stepBefore':\n return 'StepBefore'\n case 'stepAfter':\n return 'StepAfter'\n default:\n case 'line':\n return 'Linear'\n }\n }\n\n const updateAxis = (axis: string, value: any): void => {\n update({\n axes: {\n ...properties.axes,\n [axis]: {\n ...properties.axes[axis],\n ...value,\n },\n },\n })\n }\n\n const handleSetYDomain = (yDomain: [number, number]): void => {\n let bounds: [string | null, string | null]\n\n if (yDomain) {\n const [min, max] = yDomain\n bounds = [\n min === null ? null : String(min),\n max === null ? null : String(max),\n ]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n updateAxis('y', {bounds})\n }\n\n return (\n \n \n \n
Data
\n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({yColumn})\n }}\n testID=\"dropdown-y\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n {isFlagEnabled('zoomRequery') && (\n \n )}\n \n \n
Options
\n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n {properties.geom && (\n \n (\n \n {getGeomLabel(properties.geom)}\n \n )}\n menu={onCollapse => (\n \n {\n update({geom})\n }}\n selected={properties.geom === 'line'}\n >\n Linear\n \n {\n update({geom})\n }}\n selected={properties.geom === 'monotoneX'}\n >\n Smooth\n \n {\n update({geom})\n }}\n selected={properties.geom === 'step'}\n >\n Step\n \n {\n update({geom})\n }}\n selected={properties.geom === 'stepBefore'}\n >\n StepBefore\n \n {\n update({geom})\n }}\n selected={properties.geom === 'stepAfter'}\n >\n StepAfter\n \n \n )}\n />\n \n )}\n \n c.type === 'scale') ?? []}\n onChange={colors => {\n const [, fillColumnMap] = createGroupIDColumn(\n results.table,\n groupKey\n )\n // the properties that we use to calculate the colors are updated in the next render cycle so we need\n // to make a new object and override the colors\n const newProperties = {...properties, colors}\n const colorMapping = generateSeriesToColorHex(\n fillColumnMap,\n newProperties\n )\n\n update({colors, colorMapping})\n }}\n />\n \n\n {\n update({shadeBelow})\n }}\n />\n
\n \n (\n \n {properties.hoverDimension}\n \n )}\n menu={onCollapse => (\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'auto'}\n >\n Auto\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'x'}\n >\n X-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'y'}\n >\n Y-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'xy'}\n >\n X-Y Axis\n \n \n )}\n />\n \n \n \n
X-Axis
\n
\n \n \n \n \n
Y-Axis
\n \n {\n updateAxis('y', {label: evt.target.value})\n }}\n />\n \n \n \n {\n updateAxis('y', {base})\n }}\n >\n None\n \n {\n updateAxis('y', {base})\n }}\n >\n SI\n \n {\n updateAxis('y', {base})\n }}\n >\n Binary\n \n \n \n \n \n \n {\n updateAxis('y', {prefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n updateAxis('y', {suffix: evt.target.value})\n }}\n />\n \n \n \n \n \n \n (\n \n {properties.position}\n \n )}\n menu={onCollapse => (\n \n {\n update({position})\n }}\n selected={properties.position === 'overlaid'}\n >\n Overlaid\n \n {\n update({position})\n }}\n selected={properties.position === 'stacked'}\n >\n Stacked\n \n \n )}\n />\n \n
\n \n
Hover Legend
\n \n
Static Legend
\n \n \n
\n
\n )\n}\n\nexport default GraphViewOptions\n","// Libraries\nimport React, {FC, useMemo, useContext, useState, useEffect} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {\n Config,\n DomainLabel,\n LINE_COUNT,\n Plot,\n STACKED_LINE_CUMULATIVE,\n createGroupIDColumn,\n getDomainDataFromLines,\n lineTransform,\n LineLayerConfig,\n} from '@influxdata/giraffe'\nimport {RemoteDataState} from '@influxdata/clockface'\nimport memoizeOne from 'memoize-one'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\nimport ViewLoadingSpinner from 'src/visualization/components/internal/ViewLoadingSpinner'\n\n// Context\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Redux\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {\n AppState,\n InternalFromFluxResult,\n ResourceType,\n View,\n XYViewProperties,\n} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {useStaticLegend} from 'src/visualization/utils/useStaticLegend'\nimport {useZoomQuery} from 'src/visualization/utils/useZoomQuery'\nimport {\n useZoomRequeryXDomainSettings,\n useZoomRequeryYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {\n geomToInterpolation,\n filterNoisyColumns,\n parseXBounds,\n parseYBounds,\n defaultXColumn,\n defaultYColumn,\n} from 'src/shared/utils/vis'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Annotations\nimport {addAnnotationLayer} from 'src/visualization/utils/annotationUtils'\nimport {getColorMappingObjects} from 'src/visualization/utils/colorMappingUtils'\n\n// Selectors\nimport {getByID} from 'src/resources/selectors'\nimport {updateViewAndVariables} from 'src/views/actions/thunks'\n\ninterface Props extends VisualizationProps {\n properties: XYViewProperties\n}\n\nconst XYPlot: FC = ({\n properties,\n annotations,\n cellID,\n result,\n timeRange,\n transmitWindowPeriod,\n}) => {\n const [resultState, setResultState] = useState(result)\n const [preZoomResult, setPreZoomResult] =\n useState(null)\n const [requeryStatus, setRequeryStatus] = useState(\n RemoteDataState.NotStarted\n )\n\n useEffect(() => {\n setResultState(result)\n }, [result])\n\n const {theme, timeZone} = useContext(AppSettingContext)\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipHide = properties.legendHide\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n const staticLegend = useStaticLegend(properties)\n const dispatch = useDispatch()\n const view = useSelector((state: AppState) =>\n getByID>(state, ResourceType.Views, cellID)\n )\n const {activeTimeMachineID} = useSelector(\n (state: AppState) => state.timeMachines\n )\n const isVeoOpen = activeTimeMachineID === 'veo'\n\n // these two values are set in the dashboard, and used whether or not this view\n // is in a dashboard or in configuration/single cell popout mode\n // would need to add the annotation control bar to the VEOHeader to get access to the controls,\n // which are currently global values, not per dashboard\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const storedXDomain = useMemo(\n () => parseXBounds(properties.axes.x.bounds),\n [properties.axes.x.bounds]\n )\n const storedYDomain = useMemo(\n () => parseYBounds(properties.axes.y.bounds),\n [properties.axes.y.bounds]\n )\n const columnKeys = Object.keys(resultState.table.columns)\n const xColumn =\n properties.xColumn || defaultXColumn(resultState.table, '_time')\n const yColumn =\n (columnKeys.includes(properties.yColumn) && properties.yColumn) ||\n defaultYColumn(resultState.table)\n\n const isValidView =\n xColumn &&\n columnKeys.includes(xColumn) &&\n yColumn &&\n columnKeys.includes(yColumn)\n\n const colorHexes = useMemo(() => {\n if (properties.colors && properties.colors.length) {\n return properties.colors.map(color => color.hex)\n }\n return DEFAULT_LINE_COLORS.map(color => color.hex)\n }, [properties.colors])\n\n const interpolation = geomToInterpolation(properties.geom)\n\n const groupKey = useMemo(\n () => [...resultState.fluxGroupKeyUnion, 'result'],\n [resultState]\n )\n\n const memoizedYColumnData = useMemo(() => {\n if (properties.position === 'stacked') {\n const {lineData} = lineTransform(\n resultState.table,\n xColumn,\n yColumn,\n groupKey,\n colorHexes,\n properties.position\n )\n const [fillColumn] = createGroupIDColumn(resultState.table, groupKey)\n return getDomainDataFromLines(lineData, [...fillColumn], DomainLabel.Y)\n }\n\n return resultState.table.getColumn(yColumn, 'number')\n }, [\n resultState.table,\n xColumn,\n yColumn,\n groupKey,\n colorHexes,\n properties.position,\n ])\n\n const zoomQuery = useZoomQuery(properties)\n\n const [xDomain, onSetXDomain, onResetXDomain] = useZoomRequeryXDomainSettings(\n {\n adaptiveZoomHide: properties.adaptiveZoomHide,\n data: resultState.table.getColumn(xColumn, 'number'),\n parsedResult: resultState,\n preZoomResult,\n query: zoomQuery,\n setPreZoomResult,\n setRequeryStatus,\n setResult: setResultState,\n storedDomain: storedXDomain,\n timeRange,\n transmitWindowPeriod,\n }\n )\n\n const [yDomain, onSetYDomain, onResetYDomain] = useZoomRequeryYDomainSettings(\n {\n adaptiveZoomHide: properties.adaptiveZoomHide,\n data: memoizedYColumnData,\n parsedResult: resultState,\n preZoomResult,\n query: zoomQuery,\n setPreZoomResult,\n setRequeryStatus,\n setResult: setResultState,\n storedDomain: storedYDomain,\n transmitWindowPeriod,\n }\n )\n\n const legendColumns = filterNoisyColumns(\n properties.position === 'stacked'\n ? [\n ...groupKey,\n xColumn,\n yColumn,\n `_${STACKED_LINE_CUMULATIVE}`,\n `_${LINE_COUNT}`,\n ]\n : [...groupKey, xColumn, yColumn],\n resultState.table\n )\n\n const xFormatter = getFormatter(resultState.table.getColumnType(xColumn), {\n prefix: properties.axes.x.prefix,\n suffix: properties.axes.x.suffix,\n base: properties.axes.x.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const yFormatter = getFormatter(resultState.table.getColumnType(yColumn), {\n prefix: properties.axes.y.prefix,\n suffix: properties.axes.y.suffix,\n base: properties.axes.y.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n if (!isValidView) {\n return \n }\n\n const memoizedGetColorMappingObjects = memoizeOne(getColorMappingObjects)\n const [, fillColumnMap] = createGroupIDColumn(resultState.table, groupKey)\n const {colorMappingForGiraffe, colorMappingForIDPE, needsToSaveToIDPE} =\n memoizedGetColorMappingObjects(fillColumnMap, properties)\n const colorMapping = colorMappingForGiraffe\n\n // when the view is in a dashboard cell, and there is a need to save to IDPE, save it.\n // when VEO is open, prevent from saving because it causes state issues. It will be handled in the timemachine code separately.\n if (needsToSaveToIDPE && view?.dashboardID && !isVeoOpen) {\n const newView = {...view}\n newView.properties.colorMapping = colorMappingForIDPE\n\n // save to IDPE\n dispatch(updateViewAndVariables(view.dashboardID, newView))\n }\n\n const config: Config = {\n ...currentTheme,\n table: resultState.table,\n xAxisLabel: properties.axes.x.label,\n yAxisLabel: properties.axes.y.label,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendColumns,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n legendHide: tooltipHide,\n staticLegend,\n valueFormatters: {\n [xColumn]: xFormatter,\n [yColumn]: yFormatter,\n },\n layers: [\n {\n type: 'line',\n x: xColumn,\n y: yColumn,\n fill: groupKey,\n interpolation,\n position: properties.position,\n colors: colorHexes,\n shadeBelow: !!properties.shadeBelow,\n shadeBelowOpacity: 0.08,\n hoverDimension: properties.hoverDimension,\n },\n ],\n }\n\n const layer = {...(config.layers[0] as LineLayerConfig)}\n\n layer.colorMapping = colorMapping\n\n config.layers[0] = layer\n\n addAnnotationLayer(\n config,\n inAnnotationMode,\n cellID,\n xColumn,\n yColumn,\n groupKey,\n annotations,\n dispatch\n )\n\n return (\n <>\n {isFlagEnabled('zoomRequery') && (\n \n )}\n \n \n )\n}\n\nexport default XYPlot\n","// Libraries\nimport {useContext} from 'react'\n\n// Context\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {PersistanceContext} from 'src/dataExplorer/context/persistance'\n\nexport const useZoomQuery = (properties): string => {\n const {query} = useContext(PersistanceContext)\n const {id} = useContext(PipeContext)\n const {getPanelQueries} = useContext(FlowQueryContext)\n const queryTextFromProperties = properties?.queries?.[0]?.text ?? ''\n\n let zoomQuery = ''\n\n if (id) {\n zoomQuery = getPanelQueries(id)?.visual ?? ''\n } else if (queryTextFromProperties) {\n zoomQuery = queryTextFromProperties\n } else {\n zoomQuery = query\n }\n\n return zoomQuery\n}\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'xy',\n name: 'Graph',\n graphic: icon,\n component: view,\n initial: properties,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\n\nimport {Axis, Base, Color, BandViewProperties} from 'src/types'\nimport {LineHoverDimension} from '@influxdata/giraffe/dist/types'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n STATIC_LEGEND_SHOW_DEFAULT,\n STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} from 'src/visualization/constants'\n\nexport default {\n type: 'band',\n shape: 'chronograf-v2',\n geom: 'line',\n xColumn: null,\n yColumn: null,\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n colors: DEFAULT_LINE_COLORS as Color[],\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n staticLegend: {\n colorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity: LEGEND_OPACITY_DEFAULT,\n orientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show: STATIC_LEGEND_SHOW_DEFAULT,\n widthRatio: STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n },\n note: '',\n showNoteWhenEmpty: false,\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10' as Base,\n scale: 'linear',\n } as Axis,\n },\n hoverDimension: 'auto' as LineHoverDimension,\n upperColumn: '',\n mainColumn: '',\n lowerColumn: '',\n} as BandViewProperties\n","import React, {FC, useEffect} from 'react'\n\nimport {\n ButtonShape,\n Columns,\n ComponentStatus,\n Dropdown,\n Form,\n Grid,\n Icon,\n IconFont,\n Input,\n SelectDropdown,\n SelectGroup,\n} from '@influxdata/clockface'\n\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport {AXES_SCALE_OPTIONS} from 'src/visualization/constants'\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {\n defaultXColumn,\n defaultYColumn,\n parseYBounds,\n} from 'src/shared/utils/vis'\nimport ColorSchemeDropdown from 'src/visualization/components/internal/ColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport StaticLegend from 'src/visualization/components/internal/StaticLegend'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\n\nimport {BandViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\nconst {BASE_2, BASE_10} = AXES_SCALE_OPTIONS\nconst REMOVE_COLUMN = '(none)'\n\nconst ColumnSelectionError: FC = () => (\n
\n \n Cannot be the same as Main Column\n
\n)\n\ninterface Props extends VisualizationOptionProps {\n properties: BandViewProperties\n}\n\nconst BandViewOptions: FC = ({properties, results, update}) => {\n useEffect(() => {\n const {mainColumn} = properties\n if (!mainColumn) {\n const defaultColumn = results.resultColumnNames?.length\n ? results.resultColumnNames[0]\n : ''\n update({mainColumn: defaultColumn})\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const numericColumns = (results?.table?.columnKeys || []).filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const xColumn = defaultXColumn(results?.table, properties.xColumn)\n const yColumn = defaultYColumn(results?.table, properties.yColumn)\n const getGeomLabel = (geom: string): string => {\n switch (geom) {\n case 'monotoneX':\n return 'Smooth'\n case 'step':\n return 'Step'\n default:\n case 'line':\n return 'Linear'\n }\n }\n\n const updateAxis = (axis: string, value: any): void => {\n update({\n axes: {\n ...properties.axes,\n [axis]: {\n ...properties.axes[axis],\n ...value,\n },\n },\n })\n }\n\n const handleSetYDomain = (yDomain: [number, number]): void => {\n let bounds: [string | null, string | null]\n\n if (yDomain) {\n const [min, max] = yDomain\n bounds = [\n min === null ? null : String(min),\n max === null ? null : String(max),\n ]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n updateAxis('y', {bounds})\n }\n\n const updateUpperColumn = (upperColumn: string) => {\n if (upperColumn === REMOVE_COLUMN) {\n update({upperColumn: ''})\n } else {\n update({upperColumn})\n }\n }\n\n const updateMainColumn = (mainColumn: string) => {\n update({mainColumn})\n }\n\n const updateLowerColumn = (lowerColumn: string) => {\n if (lowerColumn === REMOVE_COLUMN) {\n update({lowerColumn: ''})\n } else {\n update({lowerColumn})\n }\n }\n\n const getColumnName = (columnName: string): string => {\n if (!results?.resultColumnNames.length) {\n return 'Build a query before selecting...'\n }\n\n return results.resultColumnNames?.includes(columnName)\n ? columnName\n : 'Select a column'\n }\n\n const getColumnChoices = (): Array => {\n const {resultColumnNames} = results\n if (Array.isArray(resultColumnNames) && resultColumnNames.length) {\n return [REMOVE_COLUMN, ...resultColumnNames]\n }\n return []\n }\n\n const getDropdownColumnStatus = (columnName: string): ComponentStatus => {\n const {mainColumn} = properties\n\n if (!mainColumn || mainColumn.length < 1) {\n return ComponentStatus.Default\n }\n\n if (columnName === mainColumn) {\n return ComponentStatus.Error\n }\n\n return ComponentStatus.Default\n }\n\n return (\n \n \n \n
Data
\n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({yColumn})\n }}\n testID=\"dropdown-y\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n \n \n
Aggregate Functions
\n \n {\n return (\n \n {getColumnName(properties.upperColumn)}\n \n )\n }}\n menu={onCollapse => (\n \n {getColumnChoices().map(columnName => (\n {\n updateUpperColumn(name)\n }}\n selected={properties.upperColumn === columnName}\n >\n {columnName}\n \n ))}\n \n )}\n />\n {getDropdownColumnStatus(properties.upperColumn) ===\n ComponentStatus.Error && }\n \n \n {\n return (\n \n {getColumnName(properties.mainColumn)}\n \n )\n }}\n menu={onCollapse => (\n \n {results.resultColumnNames.map(columnName => (\n {\n updateMainColumn(name)\n }}\n selected={properties.mainColumn === columnName}\n >\n {columnName}\n \n ))}\n \n )}\n />\n \n \n {\n return (\n \n {getColumnName(properties.lowerColumn)}\n \n )\n }}\n menu={onCollapse => (\n \n {getColumnChoices().map(columnName => (\n {\n updateLowerColumn(name)\n }}\n selected={properties.lowerColumn === columnName}\n >\n {columnName}\n \n ))}\n \n )}\n />\n {getDropdownColumnStatus(properties.lowerColumn) ===\n ComponentStatus.Error && }\n \n \n \n
Options
\n {properties.geom && (\n \n (\n \n {getGeomLabel(properties.geom)}\n \n )}\n menu={onCollapse => (\n \n {\n update({geom})\n }}\n selected={properties.geom === 'line'}\n >\n Linear\n \n {\n update({geom})\n }}\n selected={properties.geom === 'monotoneX'}\n >\n Smooth\n \n {\n update({geom})\n }}\n selected={properties.geom === 'step'}\n >\n Step\n \n \n )}\n />\n \n )}\n \n c.type === 'scale')}\n onChange={colors => {\n update({colors})\n }}\n />\n \n\n
\n \n (\n \n {properties.hoverDimension}\n \n )}\n menu={onCollapse => (\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'auto'}\n >\n Auto\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'x'}\n >\n X-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'y'}\n >\n Y-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'xy'}\n >\n X-Y Axis\n \n \n )}\n />\n \n \n \n
X-Axis
\n
\n \n \n \n \n
Y-Axis
\n \n {\n updateAxis('y', {label: evt.target.value})\n }}\n />\n \n \n \n {\n updateAxis('y', {base})\n }}\n >\n None\n \n {\n updateAxis('y', {base})\n }}\n >\n SI\n \n {\n updateAxis('y', {base})\n }}\n >\n Binary\n \n \n \n \n \n \n {\n updateAxis('y', {prefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n updateAxis('y', {suffix: evt.target.value})\n }}\n />\n \n \n \n \n \n
\n \n
Hover Legend
\n \n
Static Legend
\n \n \n
\n
\n )\n}\n\nexport default BandViewOptions\n","// Libraries\nimport React, {FC, useMemo, useContext} from 'react'\n\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Redux\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\nimport {useDispatch, useSelector} from 'react-redux'\n\n// Annotations\nimport {addAnnotationLayer} from 'src/visualization/utils/annotationUtils'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useMainColumn} from 'src/visualization/utils/useBandColumns'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {useStaticLegend} from 'src/visualization/utils/useStaticLegend'\nimport {\n useVisXDomainSettings,\n useVisYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {\n geomToInterpolation,\n filterNoisyColumns,\n parseXBounds,\n parseYBounds,\n defaultXColumn,\n defaultYColumn,\n} from 'src/shared/utils/vis'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {\n BAND_LINE_OPACITY,\n BAND_LINE_WIDTH,\n BAND_SHADE_OPACITY,\n INVALID_DATA_COPY,\n} from 'src/visualization/constants'\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Types\nimport {BandViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\ninterface Props extends VisualizationProps {\n properties: BandViewProperties\n}\n\nconst BandPlot: FC = ({\n properties,\n result,\n annotations,\n cellID,\n timeRange,\n}) => {\n const mainColumnName = useMainColumn(\n properties.mainColumn,\n result.resultColumnNames\n )\n\n const staticLegend = useStaticLegend(properties)\n const {theme, timeZone} = useContext(AppSettingContext)\n const dispatch = useDispatch()\n\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n\n const tooltipColorize = properties.legendColorizeRows\n const tooltipHide = properties.legendHide\n\n const storedXDomain = useMemo(\n () => parseXBounds(properties.axes.x.bounds),\n [properties.axes.x.bounds]\n )\n const storedYDomain = useMemo(\n () => parseYBounds(properties.axes.y.bounds),\n [properties.axes.y.bounds]\n )\n const xColumn = properties.xColumn || defaultXColumn(result.table, '_time')\n const yColumn =\n (result.table.columnKeys.includes(properties.yColumn) &&\n properties.yColumn) ||\n defaultYColumn(result.table)\n\n const columnKeys = result.table.columnKeys\n\n const isValidView =\n xColumn &&\n columnKeys.includes(xColumn) &&\n yColumn &&\n columnKeys.includes(yColumn)\n\n const colorHexes =\n properties.colors && properties.colors.length\n ? properties.colors.map(c => c.hex)\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const interpolation = geomToInterpolation(properties.geom)\n\n const groupKey = [...result.fluxGroupKeyUnion, 'result']\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n storedXDomain,\n result.table.getColumn(xColumn, 'number'),\n timeRange\n )\n\n const memoizedYColumnData = useMemo(\n () => result.table.getColumn(yColumn, 'number'),\n [result.table, yColumn]\n )\n\n const [yDomain, onSetYDomain, onResetYDomain] = useVisYDomainSettings(\n storedYDomain,\n memoizedYColumnData\n )\n\n const legendColumns = filterNoisyColumns(\n [...groupKey, xColumn, yColumn],\n result.table\n )\n\n // these two values are set in the dashboard, and used whether or not this view\n // is in a dashboard or in configuration/single cell popout mode\n // would need to add the annotation control bar to the VEOHeader to get access to the controls,\n // which are currently global values, not per dashboard\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const xFormatter = getFormatter(result.table.getColumnType(xColumn), {\n prefix: properties.axes.x.prefix,\n suffix: properties.axes.x.suffix,\n base: properties.axes.x.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const yFormatter = getFormatter(result.table.getColumnType(yColumn), {\n prefix: properties.axes.y.prefix,\n suffix: properties.axes.y.suffix,\n base: properties.axes.y.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n if (!isValidView) {\n return \n }\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.axes.x.label,\n yAxisLabel: properties.axes.y.label,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendColumns,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n legendHide: tooltipHide,\n staticLegend,\n valueFormatters: {\n [xColumn]: xFormatter,\n [yColumn]: yFormatter,\n },\n layers: [\n {\n type: 'band',\n x: xColumn,\n y: yColumn,\n fill: groupKey,\n interpolation,\n colors: colorHexes,\n lineWidth: BAND_LINE_WIDTH,\n lineOpacity: BAND_LINE_OPACITY,\n shadeOpacity: BAND_SHADE_OPACITY,\n hoverDimension: properties.hoverDimension,\n upperColumnName: properties.upperColumn,\n mainColumnName,\n lowerColumnName: properties.lowerColumn,\n },\n ],\n }\n\n addAnnotationLayer(\n config,\n inAnnotationMode,\n cellID,\n xColumn,\n yColumn,\n groupKey,\n annotations,\n dispatch,\n 'band'\n )\n\n return \n}\n\nexport default BandPlot\n","import {useMemo} from 'react'\n\nexport const useMainColumn = (\n mainColumn: string,\n resultColumnNames: Array\n): string =>\n useMemo(() => {\n if (!mainColumn || mainColumn.length < 1) {\n return resultColumnNames?.length ? resultColumnNames[0] : ''\n }\n\n return mainColumn\n }, [mainColumn, resultColumnNames])\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'band',\n name: 'Band',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_GAUGE_COLORS} from 'src/shared/constants/thresholds'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {Color, GaugeViewProperties} from 'src/types'\n\nexport default {\n type: 'gauge',\n shape: 'chronograf-v2',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: DEFAULT_GAUGE_COLORS as Color[],\n prefix: '',\n tickPrefix: '',\n suffix: '',\n tickSuffix: '',\n note: '',\n showNoteWhenEmpty: false,\n decimalPlaces: {\n isEnforced: true,\n digits: 2,\n },\n} as GaugeViewProperties\n","import React, {FC} from 'react'\n\nimport {\n Grid,\n Columns,\n Form,\n AutoInput,\n AutoInputMode,\n Input,\n InputType,\n} from '@influxdata/clockface'\n\nimport ThresholdsSettings from 'src/visualization/components/internal/ThresholdsSettings'\nimport {\n MIN_DECIMAL_PLACES,\n MAX_DECIMAL_PLACES,\n} from 'src/visualization/constants'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\n\nimport {GaugeViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\ninterface Props extends VisualizationOptionProps {\n properties: GaugeViewProperties\n}\n\nconst GaugeOptions: FC = ({properties, update}) => {\n const setDigits = (digits: number | null) => {\n update({\n decimalPlaces: {\n ...properties.decimalPlaces,\n digits,\n },\n })\n }\n const handleChangeMode = (mode: AutoInputMode): void => {\n if (mode === AutoInputMode.Auto) {\n setDigits(null)\n } else {\n setDigits(2)\n }\n }\n\n return (\n \n \n \n \n \n \n {\n update({prefix: evt.target.value})\n }}\n placeholder=\"%, MPH, etc.\"\n />\n \n \n \n \n {\n update({suffix: evt.target.value})\n }}\n placeholder=\"%, MPH, etc.\"\n />\n \n \n \n \n \n \n {\n update({tickPrefix: evt.target.value})\n }}\n placeholder=\"%, MPH, etc.\"\n />\n \n \n \n \n {\n update({tickSuffix: evt.target.value})\n }}\n placeholder=\"%, MPH, etc.\"\n />\n \n \n \n {properties.decimalPlaces && (\n \n {\n setDigits(convertUserInputToNumOrNaN(evt))\n }}\n value={properties.decimalPlaces.digits}\n min={MIN_DECIMAL_PLACES}\n max={MAX_DECIMAL_PLACES}\n type={InputType.Number}\n />\n }\n />\n \n )}\n \n \n \n {\n update({colors})\n }}\n />\n \n \n \n \n )\n}\n\nexport default GaugeOptions\n","import {InfluxColors} from '@influxdata/clockface'\n\nexport interface GaugeTheme {\n degree: number\n lineCount: number\n smallLineCount: number\n lineColor: string\n labelColor: string\n labelFontSize: number\n lineStrokeSmall: number\n lineStrokeLarge: number\n tickSizeSmall: number\n tickSizeLarge: number\n minFontSize: number\n minLineWidth: number\n valueColor: string\n needleColor0: string\n needleColor1: string\n overflowDelta: number\n}\n\nexport const GAUGE_THEME_LIGHT: GaugeTheme = {\n degree: (5 / 4) * Math.PI,\n labelColor: `${InfluxColors.Grey45}`,\n labelFontSize: 13,\n lineColor: `${InfluxColors.Grey85}`,\n lineCount: 5,\n lineStrokeLarge: 3,\n lineStrokeSmall: 1,\n minFontSize: 22,\n minLineWidth: 24,\n needleColor0: `${InfluxColors.Grey55}`,\n needleColor1: `${InfluxColors.Grey25}`,\n smallLineCount: 10,\n tickSizeLarge: 18,\n tickSizeSmall: 9,\n valueColor: `${InfluxColors.Grey35}`,\n\n // This constant expresses how far past the gauge max the needle should be\n // drawn if the value for the needle is greater than the gauge max. It is\n // expressed as a percentage of the circumference of a circle, e.g. 0.5 means\n // draw halfway around the gauge from the max value\n overflowDelta: 0.03,\n}\n\nexport const GAUGE_THEME_DARK: GaugeTheme = {\n degree: (5 / 4) * Math.PI,\n labelColor: `${InfluxColors.Grey55}`,\n labelFontSize: 13,\n lineColor: `${InfluxColors.Grey35}`,\n lineCount: 5,\n lineStrokeLarge: 3,\n lineStrokeSmall: 1,\n minFontSize: 22,\n minLineWidth: 24,\n needleColor0: `${InfluxColors.Grey25}`,\n needleColor1: `${InfluxColors.White}`,\n smallLineCount: 10,\n tickSizeLarge: 18,\n tickSizeSmall: 9,\n valueColor: `${InfluxColors.White}`,\n\n // This constant expresses how far past the gauge max the needle should be\n // drawn if the value for the needle is greater than the gauge max. It is\n // expressed as a percentage of the circumference of a circle, e.g. 0.5 means\n // draw halfway around the gauge from the max value\n overflowDelta: 0.03,\n}\n\nexport const GAUGE_ARC_LENGTH_DEFAULT = 1.5 * Math.PI\nexport const GAUGE_VALUE_POSITION_X_OFFSET_DEFAULT = 0\nexport const GAUGE_VALUE_POSITION_Y_OFFSET_DEFAULT = 1.5\n","// Libraries\nimport React, {FC} from 'react'\n\n// Components\nimport {Config, Plot} from '@influxdata/giraffe'\n// Types\nimport {GaugeViewProperties} from 'src/types/dashboards'\nimport {VisualizationProps} from 'src/visualization'\n\nimport {\n GAUGE_ARC_LENGTH_DEFAULT,\n GAUGE_VALUE_POSITION_X_OFFSET_DEFAULT,\n GAUGE_VALUE_POSITION_Y_OFFSET_DEFAULT,\n} from './constants'\n\ninterface Props extends VisualizationProps {\n properties: GaugeViewProperties\n}\n\nconst GaugeChart: FC = ({result, properties}) => {\n const {colors, prefix, tickPrefix, suffix, tickSuffix, decimalPlaces} =\n properties\n\n const config: Config = {\n table: result.table,\n layers: [\n {\n type: 'gauge',\n prefix: prefix,\n suffix: suffix,\n tickPrefix: tickPrefix,\n tickSuffix: tickSuffix,\n decimalPlaces: decimalPlaces,\n gaugeColors: colors,\n gaugeSize: GAUGE_ARC_LENGTH_DEFAULT,\n gaugeTheme: {\n valuePositionXOffset: GAUGE_VALUE_POSITION_X_OFFSET_DEFAULT,\n valuePositionYOffset: GAUGE_VALUE_POSITION_Y_OFFSET_DEFAULT,\n },\n },\n ],\n }\n return \n}\n\nexport default GaugeChart\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'gauge',\n name: 'Gauge',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {NINETEEN_EIGHTY_FOUR} from '@influxdata/giraffe'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n} from 'src/visualization/constants'\nimport {ScatterViewProperties} from 'src/types'\n\nexport default {\n type: 'scatter',\n shape: 'chronograf-v2',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: NINETEEN_EIGHTY_FOUR,\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n\n note: '',\n showNoteWhenEmpty: false,\n fillColumns: null,\n symbolColumns: null,\n xColumn: null,\n xDomain: null,\n yColumn: null,\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n} as ScatterViewProperties\n","import React, {FC, useState} from 'react'\nimport {SlideToggle, ComponentSize} from '@influxdata/clockface'\nimport {useVisXDomainSettings} from 'src/visualization/utils/useVisDomainSettings'\nimport {Table} from '@influxdata/giraffe'\ninterface Props {\n setDomain: (axis: string, xDomain: [number, number]) => void\n xDomain: number[] | null\n table: Table\n}\nconst isValidXDomain = xDomain => {\n return (\n Array.isArray(xDomain) &&\n xDomain.length === 2 &&\n typeof xDomain[0] === 'number' &&\n typeof xDomain[1] === 'number'\n )\n}\nexport const TimeDomainAutoToggle: FC = ({\n setDomain,\n xDomain,\n table,\n}) => {\n const [isActive, setIsActive] = useState(false)\n const [calculatedXDomain] = useVisXDomainSettings(\n xDomain,\n table.getColumn('_time', 'number')\n )\n const toggleActiveDomain = (): void => {\n if (!isActive) {\n setDomain('x', calculatedXDomain)\n } else {\n setDomain('x', [null, null])\n }\n setIsActive(!isActive)\n }\n return (\n
\n \n
\n )\n}\n","import React, {FC} from 'react'\n\nimport {\n Input,\n Grid,\n Columns,\n Form,\n SelectDropdown,\n ComponentStatus,\n MultiSelectDropdown,\n} from '@influxdata/clockface'\n\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport HexColorSchemeDropdown from 'src/visualization/components/internal/HexColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\nimport {TimeDomainAutoToggle} from 'src/visualization/types/Scatter/TimeAutoToggle'\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {GIRAFFE_COLOR_SCHEMES} from 'src/shared/constants'\n\nimport {defaultXColumn, defaultYColumn} from 'src/shared/utils/vis'\nimport {ScatterViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\ninterface Props extends VisualizationOptionProps {\n properties: ScatterViewProperties\n}\n\nconst ScatterOptions: FC = ({properties, results, update}) => {\n const availableGroupColumns = results.table.columnKeys.filter(\n name => !['_value', '_time', 'table'].includes(name)\n )\n\n const groupDropdownStatus = availableGroupColumns.length\n ? ComponentStatus.Default\n : ComponentStatus.Disabled\n\n const xColumn = defaultXColumn(results.table, properties.xColumn)\n const yColumn = defaultYColumn(results.table, properties.yColumn)\n\n let fillColumns = availableGroupColumns\n let symbolColumns = availableGroupColumns\n\n if (\n properties.fillColumns &&\n properties.fillColumns.every(col => availableGroupColumns.includes(col))\n ) {\n fillColumns = properties.fillColumns\n }\n\n if (\n properties.symbolColumns &&\n properties.symbolColumns.every(col => availableGroupColumns.includes(col))\n ) {\n symbolColumns = properties.symbolColumns\n }\n\n const numericColumns = results.table.columnKeys.filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const onSelectFillColumns = (option: string) => {\n const columnExists = fillColumns.find(col => col === option)\n let updatedColumns = fillColumns\n\n if (columnExists) {\n updatedColumns = fillColumns.filter(fc => fc !== option)\n } else {\n updatedColumns = [...fillColumns, option]\n }\n\n update({fillColumns: updatedColumns})\n }\n\n const onSelectSymbolColumns = (option: string) => {\n const columnExists = symbolColumns.find(col => col === option)\n let updatedColumns = symbolColumns\n\n if (columnExists) {\n updatedColumns = symbolColumns.filter(fc => fc !== option)\n } else {\n updatedColumns = [...symbolColumns, option]\n }\n\n update({symbolColumns: updatedColumns})\n }\n\n const setDomain = (axis: string, domain: [number, number]): void => {\n let bounds: [number | null, number | null]\n\n if (domain) {\n const [min, max] = domain\n bounds = [min, max]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n update({[`${axis}Domain`]: bounds})\n }\n\n return (\n \n \n \n
Data
\n \n \n \n \n \n \n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({yColumn})\n }}\n testID=\"dropdown-y\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n {xColumn === '_time' && (\n \n \n \n )}\n
Options
\n \n {\n update({colors})\n }}\n />\n \n \n \n
X-Axis
\n \n {\n update({xAxisLabel: e.target.value})\n }}\n />\n \n \n {\n setDomain('x', domain)\n }}\n label=\"X Axis Domain\"\n />\n \n \n
Y-Axis
\n \n {\n update({yAxisLabel: e.target.value})\n }}\n />\n \n \n \n \n {\n update({yPrefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n update({ySuffix: evt.target.value})\n }}\n />\n \n \n \n \n {\n setDomain('y', domain)\n }}\n label=\"Y Axis Domain\"\n />\n \n \n
Hover Legend
\n \n \n
\n
\n )\n}\n\nexport default ScatterOptions\n","// Libraries\nimport React, {FunctionComponent, useContext} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {\n useVisXDomainSettings,\n useVisYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {defaultXColumn, defaultYColumn} from 'src/shared/utils/vis'\nimport {AppSettingContext} from 'src/shared/contexts/app'\nimport {handleUnsupportedGraphType} from 'src/visualization/utils/annotationUtils'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {ScatterViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Selectors\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\ninterface Props extends VisualizationProps {\n properties: ScatterViewProperties\n}\n\nconst ScatterPlot: FunctionComponent = ({\n properties,\n result,\n timeRange,\n}) => {\n const {theme, timeZone} = useContext(AppSettingContext)\n const fillColumns = properties.fillColumns || result.fluxGroupKeyUnion || []\n const symbolColumns =\n properties.symbolColumns || result.fluxGroupKeyUnion || []\n\n const xColumn = properties.xColumn || defaultXColumn(result.table)\n const yColumn = properties.yColumn || defaultYColumn(result.table)\n\n const columnKeys = result.table.columnKeys\n\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n\n let timerange\n\n if (xColumn === '_time') {\n timerange = timeRange\n }\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n properties.xDomain,\n result.table.getColumn(xColumn, 'number'),\n timerange\n )\n\n const [yDomain, onSetYDomain, onResetYDomain] = useVisYDomainSettings(\n properties.yDomain,\n result.table.getColumn(yColumn, 'number')\n )\n\n const dispatch = useDispatch()\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const isValidView =\n xColumn &&\n columnKeys.includes(xColumn) &&\n yColumn &&\n columnKeys.includes(yColumn) &&\n fillColumns.every(col => columnKeys.includes(col)) &&\n symbolColumns.every(col => columnKeys.includes(col))\n\n if (!isValidView) {\n return \n }\n\n const colorHexes =\n properties.colors && properties.colors.length\n ? properties.colors\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const xFormatter = getFormatter(result.table.getColumnType(xColumn), {\n prefix: properties.xPrefix,\n suffix: properties.xSuffix,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const yFormatter = getFormatter(result.table.getColumnType(yColumn), {\n prefix: properties.yPrefix,\n suffix: properties.ySuffix,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.xAxisLabel,\n yAxisLabel: properties.yAxisLabel,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n valueFormatters: {\n [xColumn]: xFormatter,\n [yColumn]: yFormatter,\n },\n layers: [\n {\n type: 'scatter',\n x: xColumn,\n y: yColumn,\n colors: colorHexes,\n fill: fillColumns,\n symbol: symbolColumns,\n },\n ],\n }\n\n if (inAnnotationMode) {\n config.interactionHandlers = {\n singleClick: () => {\n dispatch(handleUnsupportedGraphType('Scatter Plot'))\n },\n }\n }\n\n return \n}\n\nexport default ScatterPlot\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'scatter',\n name: 'Scatter',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {DEFAULT_THRESHOLDS_LIST_COLORS} from 'src/shared/constants/thresholds'\nimport {Color, SingleStatViewProperties} from 'src/types'\n\nexport default {\n type: 'single-stat',\n shape: 'chronograf-v2',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: DEFAULT_THRESHOLDS_LIST_COLORS as Color[],\n prefix: '',\n tickPrefix: '',\n suffix: '',\n tickSuffix: '',\n note: '',\n showNoteWhenEmpty: false,\n decimalPlaces: {\n isEnforced: true,\n digits: 2,\n },\n} as SingleStatViewProperties\n","// Libraries\nimport React, {FC, useCallback} from 'react'\nimport {\n ButtonShape,\n Form,\n Grid,\n Input,\n SelectGroup,\n Columns,\n InputType,\n AutoInput,\n AutoInputMode,\n} from '@influxdata/clockface'\n\n// Utils\nimport {\n MIN_DECIMAL_PLACES,\n MAX_DECIMAL_PLACES,\n} from 'src/visualization/constants'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\nimport ThresholdsSettings from 'src/visualization/components/internal/ThresholdsSettings'\nimport {\n THRESHOLD_TYPE_TEXT,\n THRESHOLD_TYPE_BG,\n} from 'src/shared/constants/thresholds'\n\nimport {SingleStatViewProperties, Color} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\ninterface Props extends VisualizationOptionProps {\n properties: SingleStatViewProperties\n}\n\nconst SingleStatOptions: FC = ({properties, update}) => {\n const setDigits = (digits: number | null) => {\n update({\n decimalPlaces: {\n ...properties.decimalPlaces,\n digits,\n },\n })\n }\n const handleChangeMode = (mode: AutoInputMode): void => {\n if (mode === AutoInputMode.Auto) {\n setDigits(null)\n } else {\n setDigits(2)\n }\n }\n\n const setColors = (colors: Color[]): void => {\n update({colors})\n }\n\n const updateThreshold = useCallback(\n (threshold: string) => {\n update({\n colors: properties.colors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type:\n threshold === THRESHOLD_TYPE_BG\n ? THRESHOLD_TYPE_BG\n : THRESHOLD_TYPE_TEXT,\n }\n }\n\n return color\n }),\n })\n },\n [update, properties.colors]\n )\n\n const activeSetting =\n properties.colors.filter(color => color.type !== 'scale')[0]?.type || 'text'\n\n return (\n \n \n \n \n \n \n {\n update({prefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n update({suffix: evt.target.value})\n }}\n />\n \n \n \n \n \n \n {\n setDigits(convertUserInputToNumOrNaN(evt))\n }}\n value={properties.decimalPlaces.digits}\n min={MIN_DECIMAL_PLACES}\n max={MAX_DECIMAL_PLACES}\n type={InputType.Number}\n />\n }\n />\n \n \n \n \n c.type !== 'scale')}\n onSetThresholds={setColors}\n />\n \n \n \n \n Background\n \n \n Text\n \n \n \n \n \n \n )\n}\n\nexport default SingleStatOptions\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {FC} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\n\n// Utils\nimport {generateThresholdsListHexs} from 'src/shared/constants/colorOperations'\nimport {handleUnsupportedGraphType} from 'src/visualization/utils/annotationUtils'\n\n// Types\nimport {SingleStatViewProperties} from 'src/types/dashboards'\nimport {VisualizationProps} from 'src/visualization'\n\nimport {Config, Plot, getLatestValues} from '@influxdata/giraffe'\n\nimport './style.scss'\n\n// Selectors\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\ninterface Props extends VisualizationProps {\n properties: SingleStatViewProperties\n}\n\nconst SingleStat: FC = ({properties, result}) => {\n const {prefix, suffix, colors, decimalPlaces} = properties\n\n const dispatch = useDispatch()\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const latestValues = getLatestValues(result.table)\n const latestValue = latestValues[0]\n\n const {bgColor: backgroundColor, textColor} = generateThresholdsListHexs({\n colors,\n lastValue: latestValue,\n cellType: 'single-stat',\n })\n const config: Config = {\n table: result.table,\n showAxes: false,\n layers: [\n {\n type: 'single stat',\n prefix,\n suffix,\n decimalPlaces: decimalPlaces,\n textColor: textColor,\n textOpacity: 100,\n backgroundColor: backgroundColor ? backgroundColor : '',\n svgTextStyle: {\n fontSize: '100',\n fontWeight: 'lighter',\n dominantBaseline: 'middle',\n textAnchor: 'middle',\n letterSpacing: '-0.05em',\n },\n svgTextAttributes: {\n 'data-testid': 'single-stat--text',\n },\n },\n ],\n }\n\n if (inAnnotationMode) {\n config.interactionHandlers = {\n singleClick: () => {\n dispatch(handleUnsupportedGraphType('Single Stat'))\n },\n }\n }\n return \n}\n\nexport default SingleStat\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'single-stat',\n name: 'Single Stat',\n graphic: icon,\n component: view,\n initial: properties,\n options,\n })\n}\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {SelectGroup} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst MarkdownModeToggle: FC = () => {\n const {data, update} = useContext(PipeContext)\n\n return (\n \n update({mode: 'edit'})}\n value=\"edit\"\n id=\"edit\"\n >\n Edit\n \n update({mode: 'preview'})}\n value=\"preview\"\n id=\"preview\"\n >\n Preview\n \n \n )\n}\n\nexport default MarkdownModeToggle\n","// Libraries\nimport React, {FC, lazy, Suspense, useContext} from 'react'\nimport {\n RemoteDataState,\n SpinnerContainer,\n TechnoSpinner,\n} from '@influxdata/clockface'\nimport classnames from 'classnames'\n\n// Components\nimport MarkdownModeToggle from './MarkdownModeToggle'\nimport {MarkdownRenderer} from 'src/shared/components/views/MarkdownRenderer'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {PipeProp} from 'src/types/flows'\nimport {FlowContext} from 'src/flows/context/flow.current'\n\nconst MarkdownMonacoEditor = lazy(\n () => import('src/shared/components/MarkdownMonacoEditor')\n)\n\nconst MarkdownPanel: FC = ({Context}) => {\n const {data, update} = useContext(PipeContext)\n const {flow} = useContext(FlowContext)\n\n const handleChange = (text: string): void => {\n update({text})\n }\n\n let panelContents = (\n }\n />\n }\n >\n \n \n )\n\n if (flow.readOnly || data.mode === 'preview') {\n const markdownClassname = classnames('flow-panel--markdown markdown-format')\n panelContents = (\n
\n \n
\n )\n }\n\n const controls = \n return {panelContents}\n}\n\nexport default MarkdownPanel\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Components\nimport {MarkdownRenderer} from 'src/shared/components/views/MarkdownRenderer'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {PipeProp} from 'src/types/flows'\n\nconst MarkdownPanel: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n
\n \n
\n
\n )\n}\n\nexport default MarkdownPanel\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import MarkdownPanel from './view'\nimport ReadOnly from './readOnly'\nimport './style.scss'\n\nexport type MarkdownMode = 'edit' | 'preview'\n\nexport default register => {\n register({\n type: 'markdown',\n family: 'passThrough',\n component: MarkdownPanel,\n readOnlyComponent: ReadOnly,\n button: 'Note',\n initial: () => ({\n text: '',\n mode: 'edit',\n }),\n })\n}\n","import React, {FC, useCallback, useEffect, useMemo} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\n\n// Components\nimport {\n Button,\n ComponentColor,\n ComponentSize,\n FlexBox,\n IconFont,\n JustifyContent,\n} from '@influxdata/clockface'\nimport FilterList from 'src/shared/components/FilterList/FilterList'\nimport InjectSecretOption from 'src/shared/components/FilterList/InjectionOption'\nimport {showOverlay, dismissOverlay} from 'src/overlays/actions/overlays'\n\n// Actions & Selectors\nimport {getSecrets} from 'src/secrets/actions/thunks'\nimport {getAllSecrets} from 'src/resources/selectors'\n\n// Injection\nimport {InjectionOptions, InjectionType} from 'src/shared/contexts/editor'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {Secret} from 'src/types'\n\ninterface Props {\n inject: (options: InjectionOptions) => void\n cbOnInject: (queryText: string) => void\n}\n\nconst SecretsList: FC = ({inject, cbOnInject}) => {\n const dispatch = useDispatch()\n const secrets = useSelector(getAllSecrets)\n\n const handleCreateSecret = () => {\n event('Create Secret Modal Opened')\n dispatch(\n showOverlay('create-secret', null, () => dispatch(dismissOverlay()))\n )\n }\n\n const onSelect = useCallback(\n secret => {\n const options = {\n text: `secrets.get(key: \"${secret.id}\") `,\n type: InjectionType.SameLine,\n header: `import \"influxdata/influxdb/secrets\"`,\n cbParentOnUpdateText: cbOnInject,\n }\n inject(options)\n event('Inject secret into Flux Script', {secret: secret.id})\n },\n [inject, cbOnInject]\n )\n\n useEffect(() => {\n dispatch(getSecrets())\n }, [])\n\n const header = () => (\n \n
Secrets
\n \n \n )\n\n const render = secret => (\n (secret as Secret).id}\n key={secret.id}\n testID={`select-secret-${secret.id}`}\n />\n )\n\n return useMemo(\n () => (\n
\n (secret as Secret).id}\n items={secrets}\n renderItem={render}\n />\n
\n ),\n [onSelect, secrets]\n )\n}\n\nexport default SecretsList\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {\n FC,\n lazy,\n Suspense,\n useContext,\n useEffect,\n useCallback,\n useMemo,\n} from 'react'\nimport {\n RemoteDataState,\n SpinnerContainer,\n TechnoSpinner,\n Button,\n IconFont,\n ComponentColor,\n} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\n// Context\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {SidebarContext} from 'src/flows/context/sidebar'\nimport {EditorContext, EditorProvider} from 'src/shared/contexts/editor'\nimport {VariablesContext} from 'src/flows/context/variables'\n\n// Components\nimport SecretsList from 'src/flows/pipes/RawFluxEditor/SecretsList'\nimport Functions from 'src/shared/components/GroupedFunctionsList'\nimport DynamicFunctions from 'src/shared/components/DynamicFunctionsList'\n\n// Styles\nimport 'src/flows/pipes/RawFluxEditor/style.scss'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {CLOUD} from 'src/shared/constants'\nimport {buildQuery} from 'src/timeMachine/utils/queryBuilder'\n\nconst FluxMonacoEditor = lazy(\n () => import('src/shared/components/FluxMonacoEditor')\n)\n\nconst Query: FC = ({Context}) => {\n const {id, data, update} = useContext(PipeContext)\n const {\n hideSub,\n id: showId,\n show,\n showSub,\n register,\n } = useContext(SidebarContext)\n const editorContext = useContext(EditorContext)\n const {inject, injectFunction} = editorContext\n const {queries, activeQuery} = data\n // NOTE: this is to migrate bad data from an EAR, not part of the spec\n // the first condition is the correct one\n const query = Array.isArray(queries) ? queries[activeQuery] : queries\n const {variables} = useContext(VariablesContext)\n\n // NOTE: this is to migrate bad data from an EAR, not part of the spec\n // the first condition is the correct one, no need to call build query\n const queryText = query?.text ?? buildQuery(query)\n\n // NOTE: this should apply the migration\n useEffect(() => {\n if (Array.isArray(queries)) {\n return\n }\n\n if (!query.text) {\n query.text = buildQuery(query)\n }\n\n update({...data, queries: [{...query}]})\n }, [id])\n\n useEffect(() => {\n register(id, [\n {\n title: 'RawFluxEditor actions',\n actions: [\n {\n title: 'Inject Secret',\n disable: () => false,\n menu: ,\n },\n ],\n },\n ])\n }, [id, inject])\n\n const updateText = useCallback(\n text => {\n const _queries = [...queries]\n _queries[activeQuery] = {\n ...queries[activeQuery],\n text,\n }\n\n update({queries: _queries})\n },\n [queries, activeQuery]\n )\n\n const injectIntoEditor = useCallback(\n (fn): void => {\n injectFunction(fn, updateText)\n },\n [injectFunction, updateText]\n )\n\n const launcher = useCallback(() => {\n if (showId === id) {\n event('Flux Panel (Notebooks) - Toggle Functions - Off')\n hideSub()\n } else {\n event('Flux Panel (Notebooks) - Toggle Functions - On')\n show(id)\n if (CLOUD) {\n showSub()\n } else {\n showSub()\n }\n }\n }, [injectIntoEditor, showId])\n\n const controls = (\n \n )\n\n return useMemo(\n () => (\n \n }\n />\n }\n >\n \n \n \n ),\n [\n RemoteDataState.Loading,\n queryText,\n updateText,\n editorContext.editor,\n variables,\n launcher,\n ]\n )\n}\n\nexport default ({Context}) => (\n \n \n \n)\n","// Libraries\nimport React, {FC, lazy, Suspense, useContext} from 'react'\nimport {\n RemoteDataState,\n SpinnerContainer,\n TechnoSpinner,\n} from '@influxdata/clockface'\n\n// Types and Context\nimport {PipeProp} from 'src/types/flows'\nimport {VariablesContext} from 'src/flows/context/variables'\n\n// Components\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Styles\nimport 'src/flows/pipes/RawFluxEditor/style.scss'\n\nconst FluxMonacoEditor = lazy(\n () => import('src/shared/components/FluxMonacoEditor')\n)\n\nconst Query: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n const {queries, activeQuery} = data\n const query = queries[activeQuery]\n const {variables} = useContext(VariablesContext)\n\n return (\n \n }\n />\n }\n >\n {}}\n onSubmitScript={() => {}}\n autogrow\n readOnly\n wrapLines=\"on\"\n />\n \n \n )\n}\n\nexport default Query\n","import {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\nimport {find} from 'src/shared/contexts/query'\nimport View from './view'\nimport ReadOnly from './readOnly'\nimport './style.scss'\n\nexport default register => {\n register({\n type: 'rawFluxEditor',\n family: 'inputs',\n priority: 0,\n component: View,\n readOnlyComponent: ReadOnly,\n featureFlag: 'flow-panel--raw-flux',\n button: 'Flux Script',\n initial: {\n activeQuery: 0,\n queries: [\n {\n text: '// Uncomment the following line to continue building from the previous cell\\n// __PREVIOUS_RESULT__\\n',\n editMode: 'advanced',\n builderConfig: {\n buckets: [],\n tags: [],\n functions: [],\n },\n },\n ],\n },\n source: (data, query) => {\n try {\n const q = parse(query)\n const ast = parse(data.queries[data.activeQuery].text)\n const body = q.body.map(b => b.location.source).join('\\n')\n\n if (!ast.body.length) {\n return ''\n }\n\n ast.imports = Object.values(\n q.imports.concat(ast.imports).reduce((acc, curr) => {\n acc[curr.path.value] = curr\n return acc\n }, {})\n )\n\n find(ast, node => !!Object.keys(node.comments || {}).length).forEach(\n node => {\n delete node.comments\n }\n )\n\n find(\n ast,\n node =>\n node.type === 'Identifier' && node.name === '__PREVIOUS_RESULT__'\n ).forEach(node => {\n node.name = body\n })\n\n return format_from_js_file(ast)\n } catch {\n return\n }\n },\n })\n}\n","import React, {FC, useEffect, useState, useRef, useContext} from 'react'\nimport {\n getTask,\n patchTask,\n getTasksRuns,\n getTasksRun,\n postTasksRun,\n getTasksRunsLogs,\n Task,\n Run as RunType,\n} from 'src/client/generatedRoutes'\nimport {\n EmptyState,\n Button,\n ComponentSize,\n ComponentColor,\n ComponentStatus,\n SlideToggle,\n IndexList,\n DapperScrollbars,\n Overlay,\n} from '@influxdata/clockface'\nimport ErrorBoundary from 'src/shared/components/ErrorBoundary'\nimport {createDateTimeFormatter} from 'src/utils/datetime/formatters'\nimport {PopupContext} from 'src/flows/context/popup'\n\nimport {event} from 'src/cloud/utils/reporting'\n\ninterface ListProps {\n tasks: Task[]\n}\n\ninterface Props {\n task: Task\n}\n\ninterface LogProps {\n taskID: string\n runID: string\n}\n\ninterface RunProps {\n task: Task\n run: RunType\n}\n\nconst duration = (start: string, finish: string): string => {\n let timeTag = 'seconds'\n const _start = Date.parse(start)\n const _finish = Date.parse(finish)\n\n if (isNaN(_finish) || isNaN(_start)) {\n return ''\n }\n\n let diff = (_finish - _start) / 1000\n\n if (diff > 60) {\n diff = Math.round(diff / 60)\n timeTag = 'minutes'\n }\n\n return `${diff} ${timeTag}`\n}\n\nconst RunLogs: FC = ({taskID, runID}) => {\n const {closeFn} = useContext(PopupContext)\n const [logs, setLogs] = useState([])\n\n const formatter = createDateTimeFormatter('YYYY-MM-DD HH:mm:ss')\n\n useEffect(() => {\n getTasksRunsLogs({taskID, runID}).then(resp => {\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n setLogs(resp.data.events)\n })\n }, [taskID, runID])\n\n const closer = () => {\n event('Task Run Log Overlay Closed')\n\n closeFn()\n }\n\n const _logs = logs.map((l, idx) => (\n \n \n {formatter.format(new Date(l.time))}\n \n \n \n
{l.message}
\n
\n
\n
\n ))\n\n return (\n \n \n \n \n \n \n \n \n \n \n } columnCount={2}>\n {_logs}\n \n \n \n \n \n \n )\n}\n\nconst UPDATE_INTERVAL = 3 * 1000\n\nconst Run: FC = ({task, run}) => {\n const {launch} = useContext(PopupContext)\n const timer = useRef>()\n const [runOverride, setRunOverride] = useState>({})\n const formatter = createDateTimeFormatter('YYYY-MM-DD HH:mm:ss')\n const viewLogs = () => {\n launch(, {})\n }\n const _run = {\n ...run,\n ...runOverride,\n }\n\n useEffect(() => {\n // no need to update as we are in a final state\n if (run.status === 'success' || run.status === 'failed') {\n return\n }\n\n // shouldnt happen, but lets not risk the memory leak\n if (timer.current) {\n return\n }\n\n timer.current = setInterval(() => {\n getTasksRun({\n taskID: task.id,\n runID: run.id,\n }).then(resp => {\n if (resp.status !== 200) {\n return\n }\n\n setRunOverride(resp.data)\n\n if (\n (resp.data.status === 'success' || resp.data.status === 'failed') &&\n timer.current\n ) {\n clearInterval(timer.current)\n }\n })\n }, UPDATE_INTERVAL)\n\n return () => {\n if (timer.current) {\n clearInterval(timer.current)\n }\n }\n }, [])\n\n const format = (date: string) => {\n try {\n return formatter.format(new Date(date))\n } catch {\n return null\n }\n }\n\n return (\n
\n
\n \n {_run.status}\n
\n
\n \n {format(_run.scheduledFor)}\n
\n
\n \n {duration(_run.scheduledFor, _run.startedAt)}\n
\n
\n \n {duration(_run.startedAt, _run.finishedAt)}\n
\n
\n \n
\n
\n )\n}\n\nconst History: FC = ({task}) => {\n const [runs, setRuns] = useState([])\n const [status, setStatus] = useState('inactive')\n\n useEffect(() => {\n if (!task.id) {\n return\n }\n\n getTasksRuns({taskID: task.id}).then(resp => {\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n setRuns(resp.data.runs)\n })\n getTask({taskID: task.id}).then(resp => {\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n setStatus(resp.data.status)\n })\n }, [task.id])\n\n const toggleStatus = () => {\n const _status = status === 'active' ? 'inactive' : 'active'\n setStatus(_status)\n patchTask({\n taskID: task.id,\n data: {\n status: _status,\n },\n })\n }\n\n const run = () => {\n postTasksRun({\n taskID: task.id,\n }).then(resp => {\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n setRuns([resp.data, ...runs])\n })\n }\n\n const _runs = runs.map(r => (\n \n ))\n let runsView\n\n if (_runs.length) {\n runsView = _runs\n } else if (status === 'active') {\n runsView = (\n \n \n Looks like this Task doesn't have any Runs\n \n \n )\n }\n\n return (\n
\n

{task.name}

\n
\n
\n \n \n
\n \n
\n
{runsView}
\n
\n )\n}\n\nconst WrappedHistory: FC = ({tasks}) => (\n \n {tasks.map(task => (\n \n ))}\n \n)\nexport default WrappedHistory\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {FC, useContext, useCallback, useEffect, useMemo} from 'react'\nimport {\n ComponentStatus,\n Form,\n FlexBox,\n Input,\n InputType,\n Icon,\n IconFont,\n ComponentSize,\n} from '@influxdata/clockface'\nimport {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\nimport ExportTaskButton from 'src/flows/pipes/Schedule/ExportTaskButton'\nimport {patchTask, TaskUpdateRequest} from 'src/client'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {SidebarContext} from 'src/flows/context/sidebar'\nimport History from 'src/flows/pipes/Schedule/History'\nimport {SafeBlankLink} from 'src/utils/SafeBlankLink'\n\nimport {remove} from 'src/shared/contexts/query'\n\nimport './style.scss'\n\nconst validCron = (text: string): boolean => {\n const isNumber = (str: string, min: number, max: number) => {\n if (str.search(/[^\\d-,\\/*]/) !== -1) {\n return false\n }\n\n return str.split(',').every(item => {\n if (item.trim().endsWith('/')) {\n return false\n }\n const splits = item.split('/')\n\n if (splits.length > 2) {\n return false\n }\n\n const [left, right] = splits\n const sides = left.split('-')\n\n if (\n right !== undefined &&\n (!/^\\d+$/.test(right) || parseInt(right) <= 0)\n ) {\n return false\n }\n\n if (sides.length > 2) {\n return false\n }\n\n if (sides.length === 1) {\n return (\n sides[0] === '*' ||\n (/^\\d+$/.test(sides[0]) &&\n min <= parseInt(sides[0]) &&\n parseInt(sides[0]) <= max)\n )\n }\n\n if (!/^\\d+$/.test(sides[0]) || !/^\\d+$/.test(sides[1])) {\n return false\n }\n\n const small = parseInt(sides[0])\n const big = parseInt(sides[1])\n\n return (\n !isNaN(small) &&\n !isNaN(big) &&\n small <= big &&\n min <= small &&\n small <= max &&\n min <= big &&\n big <= max\n )\n })\n }\n\n const mapMonth = (str: string): string =>\n str.toLowerCase().replace(\n /[a-z]{3}/g,\n _str =>\n ({\n jan: '1',\n feb: '2',\n mar: '3',\n apr: '4',\n may: '5',\n jun: '6',\n jul: '7',\n aug: '8',\n sep: '9',\n oct: '10',\n nov: '11',\n dec: '12',\n }[_str] || _str)\n )\n const mapDay = (str: string): string =>\n str.toLowerCase().replace(\n /[a-z]{3}/g,\n _str =>\n ({\n sun: '0',\n mon: '1',\n tue: '2',\n wed: '3',\n thu: '4',\n fri: '5',\n sat: '6',\n }[_str] || _str)\n )\n const split = text.trim().split(/\\s+/)\n if (split.length < 5 || split.length > 6) {\n return false\n }\n\n if (split.length === 5) {\n split.unshift('*')\n }\n\n return [\n isNumber(split[0], 0, 59),\n isNumber(split[1], 0, 59),\n isNumber(split[2], 0, 23),\n isNumber(split[3], 1, 31),\n isNumber(mapMonth(split[4]), 1, 12),\n isNumber(mapDay(split[5]), 0, 7),\n ].reduce((acc, curr) => acc && curr, true)\n}\n\nconst Schedule: FC = ({Context}) => {\n const {id, data, update} = useContext(PipeContext)\n const {simplify, getPanelQueries} = useContext(FlowQueryContext)\n const {register} = useContext(SidebarContext)\n let intervalError = ''\n let offsetError = ''\n\n if (data?.interval === '') {\n intervalError = 'Required'\n } else if (\n data.interval !==\n data.interval\n ?.match(/(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))/g)\n ?.join('') &&\n !validCron(data.interval)\n ) {\n intervalError = 'Invalid Time'\n }\n\n if (\n data.offset &&\n data.offset !==\n data.offset.match(/(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))/g)?.join('')\n ) {\n offsetError = 'Invalid Time'\n }\n let latestTask\n if (data.task?.id) {\n latestTask = data.task\n } else if (data.task?.length) {\n latestTask = data.task[0]\n }\n\n const queryText = getPanelQueries(id)?.source ?? ''\n const hasTaskOption = useMemo(\n () =>\n !!Object.keys(\n remove(\n parse(simplify(queryText)),\n node =>\n node.type === 'OptionStatement' &&\n node.assignment.id.name === 'task'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n ).length,\n [queryText]\n )\n const taskText = useMemo(() => {\n const ast = parse(simplify(queryText))\n\n const params = remove(\n ast,\n node =>\n node.type === 'OptionStatement' && node.assignment.id.name === 'task'\n ).reduce((acc, curr) => {\n // eslint-disable-next-line no-extra-semi\n ;(curr.assignment?.init?.properties || []).reduce((_acc, _curr) => {\n if (_curr.key?.name && _curr.value?.location?.source) {\n _acc[_curr.key.name] = _curr.value.location.source\n }\n\n return _acc\n }, acc)\n\n return acc\n }, {})\n\n if (!params.name) {\n params.name = `\"Notebook Task for ${id}\"`\n }\n\n if (data.interval && !intervalError) {\n if (validCron(data.interval)) {\n params.cron = `\"${data.interval}\"`\n } else {\n params.every = data.interval\n }\n }\n\n if (data.offset && !offsetError) {\n params.offset = data.offset\n }\n\n const paramString = Object.entries(params)\n .map(([key, val]) => `${key}: ${val}`)\n .join(',\\n')\n const header = parse(`option task = {${paramString}}\\n`)\n ast.body.unshift(header.body[0])\n\n return format_from_js_file(ast)\n }, [queryText, data.interval, data.offset])\n const hasChanges = taskText !== latestTask?.flux ?? ''\n\n const updateInterval = evt => {\n update({\n interval: evt.target.value,\n })\n }\n\n const updateOffset = evt => {\n update({\n offset: evt.target.value,\n })\n }\n\n const warningMessage = useMemo(() => {\n if (!hasTaskOption) {\n return\n }\n\n return (\n
\n
\n \n
\n
\n

The task option is reserved

\n

\n This panel will take precedence over any task configuration and\n overwrite the option. Remove it from your source query to remove\n this message\n

\n
\n
\n )\n }, [hasTaskOption])\n\n const generateTask = useCallback(() => {\n return taskText\n }, [taskText])\n\n const storeTask = (task: any) => {\n const list = ((data.task?.id ? [data.task] : data.task) || []).slice(0)\n list.unshift({\n id: task.id,\n name: task.name,\n flux: task.flux,\n })\n update({\n task: list,\n })\n }\n\n useEffect(() => {\n if (!id || !data.task) {\n return\n }\n\n register(id, [\n {\n title: 'Task',\n actions: [\n {\n title: 'View Run History',\n menu: ,\n },\n {\n title: 'Overwrite Existing Task',\n disable: () => !latestTask || !hasChanges,\n action: () => {\n const _data: TaskUpdateRequest = {\n flux: generateTask(),\n }\n if (\n data.interval?.match(/(?:(\\d+(y|mo|s|m|w|h){1}))/g)?.join('')\n ) {\n _data.every = data.interval\n } else {\n _data.cron = data.interval\n }\n\n if (data.offset) {\n _data.offset = data.offset\n }\n\n patchTask({\n taskID: latestTask.id,\n data: _data,\n }).then(() => {\n data.task.find(t => t.id === latestTask.id).flux =\n generateTask()\n update({task: [...data.task]})\n })\n },\n },\n ],\n },\n ])\n }, [id, data.task, hasChanges])\n\n const persist = (\n \n )\n\n return (\n \n \n \n
Run this on a schedule
\n

Must be exported as a task

\n \n \n \n Supports{' '}\n \n flux durations\n {' '}\n and{' '}\n \n cron intervals\n \n \n ) as unknown as string\n }\n required={true}\n errorMessage={intervalError}\n >\n \n \n \n\n \n \n Supports{' '}\n \n flux durations\n \n \n ) as unknown as string\n }\n required={false}\n errorMessage={offsetError}\n >\n \n \n \n
\n {warningMessage}\n
\n )\n}\n\nexport default Schedule\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {\n ComponentStatus,\n Form,\n FlexBox,\n Input,\n InputType,\n ComponentSize,\n} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nimport './style.scss'\n\nconst Schedule: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n \n \n
Run this on a schedule
\n

Must be exported as a task

\n \n \n \n \n \n \n\n \n \n \n \n \n
\n
\n )\n}\n\nexport default Schedule\n","import View from './view'\nimport ReadOnly from './readOnly'\nimport {PipeData} from 'src/types'\nimport {patchTask} from 'src/client'\n\nconst removeFlowTasks = (tasks = []) => {\n tasks.forEach(task => {\n patchTask({\n taskID: task.id,\n data: {\n status: 'inactive',\n },\n })\n })\n}\n\nexport default register => {\n register({\n type: 'schedule',\n family: 'output',\n priority: 1,\n component: View,\n readOnlyComponent: ReadOnly,\n featureFlag: 'flow-panel--schedule',\n button: 'Task',\n beforeRemove: (data: PipeData) => removeFlowTasks(data?.task),\n })\n}\n","import React, {FC, useMemo, useContext} from 'react'\nimport {PipeContext} from 'src/flows/context/pipe'\n\ninterface Props {\n visible: boolean\n}\n\nconst Embedded: FC = ({visible}) => {\n const {data} = useContext(PipeContext)\n const parts = data.uri.split(':')\n\n return useMemo(\n () =>\n visible && (\n \n ),\n [visible, parts[1], parts[2]]\n )\n}\n\nexport default Embedded\n","import React, {FC, useContext} from 'react'\nimport {Input} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\n\ninterface Props {\n visible: boolean\n}\n\nconst Editor: FC = ({visible}) => {\n const {data, update} = useContext(PipeContext)\n const _update = evt => {\n update({uri: evt.target.value})\n }\n\n if (!visible) {\n return null\n }\n\n return (\n
\n \n \n
\n )\n}\n\nexport default Editor\n","// Libraries\nimport React, {FC, useState, useContext, useEffect} from 'react'\n\n// Components\nimport Embedded from './embedded'\nimport Editor from './editor'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {SidebarContext} from 'src/flows/context/sidebar'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\nconst Spotify: FC = ({Context}) => {\n const {id, data} = useContext(PipeContext)\n const {register} = useContext(SidebarContext)\n const [isEditing, setIsEditing] = useState(false)\n const toggleEdit = () => {\n setIsEditing(!isEditing)\n }\n\n useEffect(() => {\n if (!id) {\n return\n }\n\n register(id, [\n {\n title: 'Controls',\n actions: [\n {\n title: 'Edit Spotify URI',\n action: toggleEdit,\n },\n ],\n },\n ])\n }, [id, toggleEdit])\n\n const showEditing = isEditing || !data.uri\n\n return (\n \n
\n \n \n
\n
\n )\n}\n\nexport default Spotify\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport './style.scss'\n\nexport default register => {\n register({\n type: 'spotify',\n family: 'test',\n priority: -1,\n featureFlag: 'flow-panel--spotify',\n button: 'Music',\n component: View,\n initial: {\n uri: 'spotify:track:55A8N3HXzIecctUSvru3Ch',\n },\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {INFERNO} from '@influxdata/giraffe'\nimport {HeatmapViewProperties} from 'src/types'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n} from 'src/visualization/constants'\n\nexport default {\n queries: [],\n type: 'heatmap',\n shape: 'chronograf-v2',\n xColumn: null,\n yColumn: null,\n xDomain: null,\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n colors: INFERNO,\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n\n binSize: 10,\n note: '',\n showNoteWhenEmpty: false,\n\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n} as HeatmapViewProperties\n","// Libraries\nimport React, {FC, ChangeEvent, useState} from 'react'\nimport {\n COLOR_BLIND_FRIENDLY_DARK,\n COLOR_BLIND_FRIENDLY_LIGHT,\n INFERNO,\n MAGMA,\n PLASMA,\n VIRIDIS,\n} from '@influxdata/giraffe'\nimport {\n Form,\n Grid,\n Input,\n Columns,\n SelectDropdown,\n InputType,\n ComponentStatus,\n} from '@influxdata/clockface'\n\n// Utils\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\nimport {defaultXColumn, defaultYColumn} from 'src/shared/utils/vis'\n\n// Components\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport HexColorSchemeDropdown from 'src/visualization/components/internal/HexColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\n\nimport {HeatmapViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\nconst HEATMAP_COLOR_SCHEMES = [\n {name: 'Magma', colors: MAGMA},\n {name: 'Inferno', colors: INFERNO},\n {name: 'Viridis', colors: VIRIDIS},\n {name: 'Plasma', colors: PLASMA},\n {name: 'Color Blind Friendly - Light', colors: COLOR_BLIND_FRIENDLY_LIGHT},\n {name: 'Color Blind Friendly - Dark', colors: COLOR_BLIND_FRIENDLY_DARK},\n]\n\ninterface Props extends VisualizationOptionProps {\n properties: HeatmapViewProperties\n}\n\nconst HeatmapOptions: FC = ({properties, results, update}) => {\n const [binInputStatus, setBinInputStatus] = useState(ComponentStatus.Default)\n const [binInput, setBinInput] = useState(properties.binSize)\n\n const xColumn = defaultXColumn(results.table, properties.xColumn)\n const yColumn = defaultYColumn(results.table, properties.yColumn)\n\n const onSetBinSize = (e: ChangeEvent) => {\n const val = convertUserInputToNumOrNaN(e)\n setBinInput(val)\n\n if (isNaN(val) || val < 5) {\n setBinInputStatus(ComponentStatus.Error)\n return\n }\n\n setBinInputStatus(ComponentStatus.Default)\n update({binSize: val})\n }\n\n const numericColumns = results.table.columnKeys.filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const setDomain = (axis: string, domain: [number, number]): void => {\n let bounds: [number | null, number | null]\n\n if (domain) {\n const [min, max] = domain\n bounds = [min, max]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n update({[`${axis}Domain`]: bounds})\n }\n\n return (\n \n \n \n
Data
\n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({yColumn})\n }}\n testID=\"dropdown-y\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n
Options
\n \n {\n update({colors})\n }}\n />\n \n \n \n \n \n \n
X-Axis
\n \n {\n update({xAxisLabel: e.target.value})\n }}\n />\n \n \n {\n setDomain('x', domain)\n }}\n label=\"X Axis Domain\"\n />\n \n \n
Y-Axis
\n \n {\n update({yAxisLabel: e.target.value})\n }}\n />\n \n \n \n \n {\n update({yPrefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n update({ySuffix: evt.target.value})\n }}\n />\n \n \n \n \n {\n setDomain('y', domain)\n }}\n label=\"Y Axis Domain\"\n />\n \n \n
Hover Legend
\n \n \n
\n
\n )\n}\n\nexport default HeatmapOptions\n","// Libraries\nimport React, {FunctionComponent, useContext} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {\n useVisXDomainSettings,\n useVisYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {handleUnsupportedGraphType} from 'src/visualization/utils/annotationUtils'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Types\nimport {HeatmapViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Selectors\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\ninterface Props extends VisualizationProps {\n properties: HeatmapViewProperties\n}\n\nconst HeatmapPlot: FunctionComponent = ({\n result,\n properties,\n timeRange,\n}) => {\n const {theme, timeZone} = useContext(AppSettingContext)\n const columnKeys = result.table.columnKeys\n const xColumn =\n properties.xColumn ||\n ['_time', '_start', '_stop'].filter(field =>\n result.table.columnKeys.includes(field)\n )[0] ||\n result.table.columnKeys[0]\n const yColumn =\n properties.yColumn ||\n ['_value'].filter(field => result.table.columnKeys.includes(field))[0] ||\n result.table.columnKeys[0]\n\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n properties.xDomain,\n result.table.getColumn(xColumn, 'number'),\n timeRange\n )\n\n const [yDomain, onSetYDomain, onResetYDomain] = useVisYDomainSettings(\n properties.yDomain,\n result.table.getColumn(yColumn, 'number')\n )\n\n const dispatch = useDispatch()\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const isValidView =\n xColumn &&\n yColumn &&\n columnKeys.includes(yColumn) &&\n columnKeys.includes(xColumn)\n\n if (!isValidView) {\n return \n }\n\n const colors: string[] =\n properties.colors && properties.colors.length\n ? properties.colors\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const xFormatter = getFormatter(result.table.getColumnType(xColumn), {\n prefix: properties.xPrefix,\n suffix: properties.xSuffix,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const yFormatter = getFormatter(result.table.getColumnType(yColumn), {\n prefix: properties.yPrefix,\n suffix: properties.ySuffix,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.xAxisLabel,\n yAxisLabel: properties.yAxisLabel,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n valueFormatters: {\n [xColumn]: xFormatter,\n [yColumn]: yFormatter,\n },\n layers: [\n {\n type: 'heatmap',\n x: xColumn,\n y: yColumn,\n colors,\n binSize: properties.binSize,\n },\n ],\n }\n\n if (inAnnotationMode) {\n config.interactionHandlers = {\n singleClick: () => {\n dispatch(handleUnsupportedGraphType('Heatmap'))\n },\n }\n }\n\n return \n}\n\nexport default HeatmapPlot\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'heatmap',\n name: 'Heatmap',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {Color, HistogramViewProperties} from 'src/types'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n} from 'src/visualization/constants'\n\nexport default {\n queries: [],\n type: 'histogram',\n shape: 'chronograf-v2',\n xColumn: '_value',\n xDomain: null,\n xAxisLabel: '',\n fillColumns: null,\n position: 'stacked',\n binCount: 30,\n colors: DEFAULT_LINE_COLORS as Color[],\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n\n note: '',\n showNoteWhenEmpty: false,\n} as HistogramViewProperties\n","import React, {FC} from 'react'\n\nimport {\n Input,\n Grid,\n Columns,\n Form,\n SelectDropdown,\n Dropdown,\n InputType,\n AutoInput,\n AutoInputMode,\n ComponentStatus,\n MultiSelectDropdown,\n} from '@influxdata/clockface'\n\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport {defaultXColumn} from 'src/shared/utils/vis'\nimport ColorSchemeDropdown from 'src/visualization/components/internal/ColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport {HistogramViewProperties} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\n\ninterface Props extends VisualizationOptionProps {\n properties: HistogramViewProperties\n}\n\nconst HistogramOptions: FC = ({properties, results, update}) => {\n const availableGroupColumns = results.table.columnKeys.filter(\n name => !['_value', '_time', 'table'].includes(name)\n )\n\n const groupDropdownStatus = availableGroupColumns.length\n ? ComponentStatus.Default\n : ComponentStatus.Disabled\n\n const xColumn = defaultXColumn(results.table, properties.xColumn)\n\n const numericColumns = results.table.columnKeys.filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const handleChangeMode = (mode: AutoInputMode): void => {\n if (mode === AutoInputMode.Auto) {\n update({binCount: null})\n } else {\n update({binCount: 30})\n }\n }\n\n const setDomain = (axis: string, domain: [number, number]): void => {\n let bounds: [number | null, number | null]\n\n if (domain) {\n const [min, max] = domain\n bounds = [min, max]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n update({[`${axis}Domain`]: bounds})\n }\n\n let fillColumns = results.fluxGroupKeyUnion\n\n if (\n properties.fillColumns &&\n properties.fillColumns.every(col => availableGroupColumns.includes(col))\n ) {\n fillColumns = properties.fillColumns\n }\n\n const onSelectFillColumns = (option: string) => {\n const columnExists = fillColumns.find(col => col === option)\n let updatedColumns = fillColumns\n\n if (columnExists) {\n updatedColumns = fillColumns.filter(fc => fc !== option)\n } else {\n updatedColumns = [...fillColumns, option]\n }\n\n update({fillColumns: updatedColumns})\n }\n\n return (\n \n \n \n
Data
\n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n \n \n \n \n
Options
\n \n {\n update({colors})\n }}\n />\n \n \n (\n \n {properties.position}\n \n )}\n menu={onCollapse => (\n \n {\n update({position})\n }}\n selected={properties.position === 'overlaid'}\n >\n Overlaid\n \n {\n update({position})\n }}\n selected={properties.position === 'stacked'}\n >\n Stacked\n \n \n )}\n />\n \n \n {\n update({binCount: convertUserInputToNumOrNaN(evt)})\n }}\n />\n }\n />\n \n \n \n
X-Axis
\n \n update({xAxisLabel: e.target.value})}\n />\n \n {\n setDomain('x', domain)\n }}\n label=\"X Axis Domain\"\n />\n \n \n
Hover Legend
\n \n \n
\n
\n )\n}\n\nexport default HistogramOptions\n","// Libraries\nimport React, {FunctionComponent, useContext} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {useVisXDomainSettings} from 'src/visualization/utils/useVisDomainSettings'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {AppSettingContext} from 'src/shared/contexts/app'\nimport {handleUnsupportedGraphType} from 'src/visualization/utils/annotationUtils'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {HistogramViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Selectors\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\ninterface Props extends VisualizationProps {\n properties: HistogramViewProperties\n}\n\nconst HistogramPlot: FunctionComponent = ({result, properties}) => {\n const {theme, timeZone} = useContext(AppSettingContext)\n const columnKeys = result.table.columnKeys\n const fillColumns = properties.fillColumns || result.fluxGroupKeyUnion\n\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n properties.xDomain,\n result.table.getColumn(properties.xColumn, 'number')\n )\n\n const dispatch = useDispatch()\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const isValidView =\n properties.xColumn &&\n columnKeys.includes(properties.xColumn) &&\n fillColumns.every(col => columnKeys.includes(col))\n\n if (!isValidView) {\n return \n }\n\n const colorHexes =\n properties.colors && properties.colors.length\n ? properties.colors.map(c => c.hex)\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const xFormatter = getFormatter(\n result.table.getColumnType(properties.xColumn),\n {timeZone}\n )\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.xAxisLabel,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n valueFormatters: {[properties.xColumn]: xFormatter},\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n layers: [\n {\n type: 'histogram',\n x: properties.xColumn,\n colors: colorHexes,\n fill: properties.fillColumns || [],\n binCount: properties.binCount,\n position: properties.position,\n },\n ],\n }\n\n if (inAnnotationMode) {\n config.interactionHandlers = {\n singleClick: () => {\n dispatch(handleUnsupportedGraphType('Histogram'))\n },\n }\n }\n\n return \n}\n\nexport default HistogramPlot\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'histogram',\n name: 'Histogram',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {NINETEEN_EIGHTY_FOUR} from '@influxdata/giraffe'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n} from 'src/visualization/constants'\nimport {MosaicViewProperties} from 'src/types'\n\nexport default {\n type: 'mosaic',\n shape: 'chronograf-v2',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'last'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n colors: NINETEEN_EIGHTY_FOUR,\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n\n note: '',\n showNoteWhenEmpty: false,\n fillColumns: null,\n xColumn: null,\n xDomain: null,\n ySeriesColumns: [],\n yLabelColumns: [],\n yLabelColumnSeparator: '',\n yDomain: null,\n xAxisLabel: '',\n yAxisLabel: '',\n xPrefix: '',\n xSuffix: '',\n yPrefix: '',\n ySuffix: '',\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n} as MosaicViewProperties\n","// Libraries\nimport React, {FunctionComponent, useContext} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {\n useVisXDomainSettings,\n useVisYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {defaultXColumn} from 'src/shared/utils/vis'\nimport {AppSettingContext} from 'src/shared/contexts/app'\nimport {handleUnsupportedGraphType} from 'src/visualization/utils/annotationUtils'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {MosaicViewProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Selectors\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\ninterface Props extends VisualizationProps {\n properties: MosaicViewProperties\n}\n\nconst MosaicPlot: FunctionComponent = ({\n properties,\n result,\n timeRange,\n}) => {\n const {theme, timeZone} = useContext(AppSettingContext)\n const fillColumns = properties.fillColumns || []\n const xColumn = properties.xColumn || defaultXColumn(result.table)\n const ySeriesColumns = properties.ySeriesColumns || []\n const columnKeys = result.table.columnKeys\n\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n properties.xDomain,\n result.table.getColumn(xColumn, 'number'),\n timeRange\n )\n\n const [yDomain, onSetYDomain, onResetYDomain] = useVisYDomainSettings(\n properties.yDomain,\n result.table.getColumn(ySeriesColumns[0], 'string')\n )\n\n const dispatch = useDispatch()\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n\n const isValidView =\n xColumn &&\n columnKeys.includes(xColumn) &&\n ySeriesColumns.every(ySeriesColumn => columnKeys.includes(ySeriesColumn)) &&\n fillColumns.length !== 0 &&\n fillColumns.every(fillColumn => columnKeys.includes(fillColumn))\n\n if (!isValidView) {\n return \n }\n\n const colorHexes =\n properties.colors && properties.colors.length\n ? properties.colors\n : DEFAULT_LINE_COLORS.map(c => c.hex)\n\n const xFormatter = getFormatter(result.table.getColumnType(xColumn), {\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.xAxisLabel,\n yAxisLabel: properties.yAxisLabel,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n valueFormatters: {\n [xColumn]: xFormatter,\n },\n layers: [\n {\n type: 'mosaic',\n x: xColumn,\n y: ySeriesColumns,\n yLabelColumns: properties.yLabelColumns,\n yLabelColumnSeparator: properties.yLabelColumnSeparator,\n colors: colorHexes,\n fill: fillColumns,\n },\n ],\n }\n\n if (inAnnotationMode) {\n config.interactionHandlers = {\n singleClick: () => {\n dispatch(handleUnsupportedGraphType('Mosaic'))\n },\n }\n }\n return \n}\nexport default MosaicPlot\n","// Libraries\nimport React, {FC} from 'react'\n\n// Components\nimport {\n Form,\n Grid,\n Input,\n SelectDropdown,\n ComponentStatus,\n Columns,\n MultiSelectDropdown,\n} from '@influxdata/clockface'\nimport ColorSchemeDropdown from 'src/visualization/components/internal/ColorSchemeDropdown'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {\n defaultXColumn,\n defaultYLabelColumns,\n defaultYSeriesColumns,\n} from 'src/shared/utils/vis'\n\n// Types\nimport {MosaicViewProperties, Color} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\ninterface Props extends VisualizationOptionProps {\n properties: MosaicViewProperties\n}\n\nconst MosaicOptions: FC = props => {\n const {properties, results, update} = props\n let fillColumns = []\n const stringColumns = results.table.columnKeys.filter(k => {\n if (k === 'result' || k === 'table') {\n return false\n }\n\n return results.table.getColumnType(k) === 'string'\n })\n\n // Mosaic graphs are currently limited to always using _time on the x-axis\n // future enhancements will depend on the visualization library\n const xDataColumn = (results?.table?.columnKeys || []).filter(\n key => key === '_time'\n )\n\n if (\n Array.isArray(properties.fillColumns) &&\n properties.fillColumns.every(col => stringColumns.includes(col))\n ) {\n fillColumns = properties.fillColumns\n } else {\n for (const key of stringColumns) {\n if (key.startsWith('_value')) {\n fillColumns = [key]\n break\n }\n }\n }\n\n const xColumn = defaultXColumn(results.table, properties.xColumn)\n const ySeriesColumns = defaultYSeriesColumns(\n results.table,\n properties.ySeriesColumns\n )\n\n const yLabelColumns = defaultYLabelColumns(\n properties.yLabelColumns,\n ySeriesColumns\n )\n\n // TODO: make this normal DashboardColor[] and not string[]\n const colors = properties.colors.map(color => {\n return {hex: color} as Color\n })\n\n const updateYLabelColumns = (\n validYSeriesColumns: Array,\n currentYLabelColumns: Array,\n option: string\n ): Array => {\n const columnExists = Array.isArray(currentYLabelColumns)\n ? currentYLabelColumns.find(col => col === option)\n : false\n let updatedYLabelColumns = currentYLabelColumns || []\n\n if (columnExists) {\n updatedYLabelColumns = currentYLabelColumns.filter(\n currentYLabelColumn => currentYLabelColumn !== option\n )\n } else {\n updatedYLabelColumns = validYSeriesColumns.includes(option)\n ? [...updatedYLabelColumns, option]\n : updatedYLabelColumns\n }\n return updatedYLabelColumns\n }\n\n const onSelectYSeriesColumns = (option: string) => {\n const columnExists = Array.isArray(ySeriesColumns)\n ? ySeriesColumns.find(col => col === option)\n : false\n let updatedYSeriesColumns = ySeriesColumns || []\n\n if (columnExists) {\n updatedYSeriesColumns = ySeriesColumns.filter(\n ySeriesColumn => ySeriesColumn !== option\n )\n } else {\n updatedYSeriesColumns = [...updatedYSeriesColumns, option]\n }\n\n const updatedYLabelColumns = updateYLabelColumns(\n updatedYSeriesColumns,\n yLabelColumns,\n option\n )\n update({\n yLabelColumns: updatedYLabelColumns,\n ySeriesColumns: updatedYSeriesColumns,\n })\n }\n\n const onSelectYLabelColumns = (option: string) => {\n update({\n yLabelColumns: updateYLabelColumns(ySeriesColumns, yLabelColumns, option),\n })\n }\n\n return (\n \n \n \n
Data
\n \n {\n update({fillColumns: [fillColumn]})\n }}\n testID=\"dropdown-fill\"\n buttonStatus={\n stringColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n xDataColumn.length === 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n \n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n \n \n
Options
\n \n {\n update({colors: colors.map(c => c.hex)})\n }}\n />\n \n
X-Axis
\n \n update({xAxisLabel: e.target.value})}\n />\n \n \n
Y-Axis
\n \n update({yAxisLabel: e.target.value})}\n />\n \n \n update({yLabelColumnSeparator: e.target.value})}\n />\n \n \n \n \n \n \n
Hover Legend
\n \n \n
\n
\n )\n}\n\nexport default MosaicOptions\n","import icon from './icon'\nimport properties from './properties'\nimport view from './view'\nimport options from './options'\n\nexport default register => {\n register({\n type: 'mosaic',\n name: 'Mosaic',\n graphic: icon,\n component: view,\n initial: properties,\n options,\n })\n}\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {DEFAULT_THRESHOLDS_LIST_COLORS} from 'src/shared/constants/thresholds'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {\n DEFAULT_FILLVALUES,\n AGG_WINDOW_AUTO,\n} from 'src/timeMachine/constants/queryBuilder'\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n STATIC_LEGEND_SHOW_DEFAULT,\n STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n} from 'src/visualization/constants'\n\nimport {Axis, Base, Color, LinePlusSingleStatProperties} from 'src/types'\n\nexport default {\n type: 'line-plus-single-stat',\n shape: 'chronograf-v2',\n xColumn: null,\n yColumn: null,\n position: 'overlaid',\n\n queries: [\n {\n name: '',\n text: '',\n editMode: 'builder',\n builderConfig: {\n buckets: [],\n tags: [\n {\n key: '_measurement',\n values: [],\n aggregateFunctionType: 'filter',\n },\n ],\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: AGG_WINDOW_AUTO,\n fillValues: DEFAULT_FILLVALUES,\n },\n },\n },\n ],\n\n legendColorizeRows: LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity: LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n staticLegend: {\n heightRatio: STATIC_LEGEND_HEIGHT_RATIO_NOT_SET,\n opacity: LEGEND_OPACITY_DEFAULT,\n orientationThreshold: LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n show: STATIC_LEGEND_SHOW_DEFAULT,\n widthRatio: STATIC_LEGEND_WIDTH_RATIO_DEFAULT,\n },\n\n note: '',\n showNoteWhenEmpty: false,\n axes: {\n x: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10',\n scale: 'linear',\n } as Axis,\n y: {\n bounds: ['', ''],\n label: '',\n prefix: '',\n suffix: '',\n base: '10' as Base,\n scale: 'linear',\n } as Axis,\n },\n colors: [\n ...(DEFAULT_LINE_COLORS as Color[]),\n ...(DEFAULT_THRESHOLDS_LIST_COLORS as Color[]),\n ],\n prefix: '',\n tickPrefix: '',\n suffix: '',\n tickSuffix: '',\n decimalPlaces: {\n isEnforced: true,\n digits: 2,\n },\n generateXAxisTicks: [],\n generateYAxisTicks: [],\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n} as LinePlusSingleStatProperties\n","import React, {FC, useCallback} from 'react'\n\nimport {\n Input,\n InputType,\n Grid,\n Columns,\n Form,\n SelectDropdown,\n SelectGroup,\n Dropdown,\n ComponentStatus,\n ButtonShape,\n AutoInput,\n AutoInputMode,\n} from '@influxdata/clockface'\n\nimport AutoDomainInput from 'src/shared/components/AutoDomainInput'\nimport {\n AXES_SCALE_OPTIONS,\n MIN_DECIMAL_PLACES,\n MAX_DECIMAL_PLACES,\n} from 'src/visualization/constants'\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\nimport {\n FORMAT_OPTIONS,\n resolveTimeFormat,\n} from 'src/visualization/utils/timeFormat'\nimport {\n defaultXColumn,\n defaultYColumn,\n parseYBounds,\n} from 'src/shared/utils/vis'\nimport {\n THRESHOLD_TYPE_TEXT,\n THRESHOLD_TYPE_BG,\n} from 'src/shared/constants/thresholds'\nimport ColorSchemeDropdown from 'src/visualization/components/internal/ColorSchemeDropdown'\nimport AxisTicksGenerator from 'src/visualization/components/internal/AxisTicksGenerator'\nimport Checkbox from 'src/shared/components/Checkbox'\nimport ThresholdsSettings from 'src/visualization/components/internal/ThresholdsSettings'\nimport HoverLegend from 'src/visualization/components/internal/HoverLegend'\nimport StaticLegend from 'src/visualization/components/internal/StaticLegend'\nimport {LinePlusSingleStatProperties, Color} from 'src/types'\nimport {VisualizationOptionProps} from 'src/visualization'\n\nconst {BASE_2, BASE_10} = AXES_SCALE_OPTIONS\n\ninterface Props extends VisualizationOptionProps {\n properties: LinePlusSingleStatProperties\n}\n\nconst SingleStatWithLineOptions: FC = ({\n properties,\n results,\n update,\n}) => {\n const numericColumns = results.table.columnKeys.filter(key => {\n if (key === 'result' || key === 'table') {\n return false\n }\n\n const columnType = results.table.getColumnType(key)\n\n return columnType === 'time' || columnType === 'number'\n })\n\n const xColumn = defaultXColumn(results.table, properties.xColumn)\n const yColumn = defaultYColumn(results.table, properties.yColumn)\n\n const updateAxis = (axis: string, value: any): void => {\n update({\n axes: {\n ...properties.axes,\n [axis]: {\n ...properties.axes[axis],\n ...value,\n },\n },\n })\n }\n\n const handleSetYDomain = (yDomain: [number, number]): void => {\n let bounds: [string | null, string | null]\n\n if (yDomain) {\n const [min, max] = yDomain\n bounds = [\n min === null ? null : String(min),\n max === null ? null : String(max),\n ]\n } else {\n bounds = [null, null]\n }\n\n if (bounds[0] === null && bounds[1] === null) {\n bounds = null\n }\n\n updateAxis('y', {bounds})\n }\n\n const setDigits = (digits: number | null) => {\n update({\n decimalPlaces: {\n ...properties.decimalPlaces,\n digits,\n },\n })\n }\n const handleChangeMode = (mode: AutoInputMode): void => {\n if (mode === AutoInputMode.Auto) {\n setDigits(null)\n } else {\n setDigits(2)\n }\n }\n const setColors = (colors: Color[]): void => {\n if (colors[0]?.type === 'scale') {\n update({\n colors: [\n ...properties.colors.filter(c => c.type !== 'scale'),\n ...colors,\n ],\n })\n } else {\n update({\n colors: [\n ...properties.colors.filter(c => c.type === 'scale'),\n ...colors,\n ],\n })\n }\n }\n\n const updateThreshold = useCallback(\n (threshold: string) => {\n update({\n colors: properties.colors.map(color => {\n if (color.type !== 'scale') {\n return {\n ...color,\n type:\n threshold === THRESHOLD_TYPE_BG\n ? THRESHOLD_TYPE_BG\n : THRESHOLD_TYPE_TEXT,\n }\n }\n\n return color\n }),\n })\n },\n [update, properties.colors]\n )\n\n const activeSetting =\n properties.colors.filter(color => color.type !== 'scale')[0]?.type || 'text'\n\n return (\n \n \n \n
Data
\n \n {\n update({xColumn})\n }}\n testID=\"dropdown-x\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {\n update({yColumn})\n }}\n testID=\"dropdown-y\"\n buttonStatus={\n numericColumns.length == 0\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n option.text)}\n selectedOption={resolveTimeFormat(properties.timeFormat)}\n onSelect={(format: string) => {\n update({timeFormat: format})\n }}\n />\n \n \n \n
Options
\n \n c.type === 'scale')}\n onChange={setColors}\n />\n \n\n {\n update({shadeBelow})\n }}\n />\n
\n \n (\n \n {properties.hoverDimension}\n \n )}\n menu={onCollapse => (\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'auto'}\n >\n Auto\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'x'}\n >\n X-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'y'}\n >\n Y-Axis\n \n {\n update({hoverDimension})\n }}\n selected={properties.hoverDimension === 'xy'}\n >\n X-Y Axis\n \n \n )}\n />\n \n \n \n
X-Axis
\n
\n \n \n \n \n
Y-Axis
\n \n {\n updateAxis('y', {label: evt.target.value})\n }}\n />\n \n \n \n {\n updateAxis('y', {base})\n }}\n >\n None\n \n {\n updateAxis('y', {base})\n }}\n >\n SI\n \n {\n updateAxis('y', {base})\n }}\n >\n Binary\n \n \n \n \n \n \n {\n updateAxis('y', {prefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n updateAxis('y', {suffix: evt.target.value})\n }}\n />\n \n \n \n \n \n \n (\n \n {properties.position}\n \n )}\n menu={onCollapse => (\n \n {\n update({position})\n }}\n selected={properties.position === 'overlaid'}\n >\n Overlaid\n \n {\n update({position})\n }}\n selected={properties.position === 'stacked'}\n >\n Stacked\n \n \n )}\n />\n \n
\n \n \n \n \n {\n update({prefix: evt.target.value})\n }}\n />\n \n \n \n \n {\n update({suffix: evt.target.value})\n }}\n />\n \n \n \n \n \n \n {\n setDigits(convertUserInputToNumOrNaN(evt))\n }}\n value={properties.decimalPlaces.digits}\n min={MIN_DECIMAL_PLACES}\n max={MAX_DECIMAL_PLACES}\n type={InputType.Number}\n />\n }\n />\n \n \n \n \n c.type !== 'scale')}\n onSetThresholds={setColors}\n />\n \n \n \n \n Background\n \n \n Text\n \n \n \n \n \n
Hover Legend
\n \n
Static Legend
\n \n \n
\n
\n )\n}\n\nexport default SingleStatWithLineOptions\n","// Libraries\nimport React, {FC, useMemo, useContext} from 'react'\nimport {\n Config,\n DomainLabel,\n LINE_COUNT,\n Plot,\n STACKED_LINE_CUMULATIVE,\n SingleStatLayerConfig,\n createGroupIDColumn,\n getDomainDataFromLines,\n getLatestValues,\n lineTransform,\n} from '@influxdata/giraffe'\n\n// Redux\nimport {isAnnotationsModeEnabled} from 'src/annotations/selectors'\n\n// Component\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\n\n// Utils\nimport {useAxisTicksGenerator} from 'src/visualization/utils/useAxisTicksGenerator'\nimport {getFormatter} from 'src/visualization/utils/getFormatter'\nimport {useLegendOpacity} from 'src/visualization/utils/useLegendOpacity'\nimport {useStaticLegend} from 'src/visualization/utils/useStaticLegend'\nimport {\n useVisXDomainSettings,\n useVisYDomainSettings,\n} from 'src/visualization/utils/useVisDomainSettings'\nimport {\n geomToInterpolation,\n filterNoisyColumns,\n parseXBounds,\n parseYBounds,\n defaultXColumn,\n defaultYColumn,\n} from 'src/shared/utils/vis'\nimport {generateThresholdsListHexs} from 'src/shared/constants/colorOperations'\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Constants\nimport {VIS_THEME, VIS_THEME_LIGHT} from 'src/shared/constants'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\nimport {INVALID_DATA_COPY} from 'src/visualization/constants'\n\n// Types\nimport {LinePlusSingleStatProperties} from 'src/types'\nimport {VisualizationProps} from 'src/visualization'\n\n// Annotations\nimport {addAnnotationLayer} from 'src/visualization/utils/annotationUtils'\n\nimport {useDispatch, useSelector} from 'react-redux'\n\ninterface Props extends VisualizationProps {\n properties: LinePlusSingleStatProperties\n}\n\nconst SingleStatWithLine: FC = ({\n properties,\n result,\n timeRange,\n annotations,\n cellID,\n}) => {\n const {theme, timeZone} = useContext(AppSettingContext)\n const axisTicksOptions = useAxisTicksGenerator(properties)\n const tooltipOpacity = useLegendOpacity(properties.legendOpacity)\n const tooltipColorize = properties.legendColorizeRows\n const tooltipHide = properties.legendHide\n const tooltipOrientationThreshold = properties.legendOrientationThreshold\n const staticLegend = useStaticLegend(properties)\n\n // these two values are set in the dashboard, and used whether or not this view\n // is in a dashboard or in configuration/single cell popout mode\n // would need to add the annotation control bar to the VEOHeader to get access to the controls,\n // which are currently global values, not per dashboard\n const inAnnotationMode = useSelector(isAnnotationsModeEnabled)\n const dispatch = useDispatch()\n\n const storedXDomain = useMemo(\n () => parseXBounds(properties.axes.x.bounds),\n [properties.axes.x.bounds]\n )\n const storedYDomain = useMemo(\n () => parseYBounds(properties.axes.y.bounds),\n [properties.axes.y.bounds]\n )\n const xColumn = properties.xColumn || defaultXColumn(result.table, '_time')\n const yColumn =\n (result.table.columnKeys.includes(properties.yColumn) &&\n properties.yColumn) ||\n defaultYColumn(result.table)\n\n const columnKeys = result.table.columnKeys\n\n const isValidView =\n xColumn &&\n columnKeys.includes(xColumn) &&\n yColumn &&\n columnKeys.includes(yColumn)\n\n const colorHexes = useMemo(() => {\n const _colors = properties.colors.filter(c => c.type === 'scale')\n if (_colors && _colors.length) {\n return _colors.map(color => color.hex)\n }\n return DEFAULT_LINE_COLORS.map(color => color.hex)\n }, [properties.colors])\n\n const interpolation = geomToInterpolation('line')\n\n const groupKey = useMemo(\n () => [...result.fluxGroupKeyUnion, 'result'],\n [result]\n )\n\n const [xDomain, onSetXDomain, onResetXDomain] = useVisXDomainSettings(\n storedXDomain,\n result.table.getColumn(xColumn, 'number'),\n timeRange\n )\n\n const memoizedYColumnData = useMemo(() => {\n if (properties.position === 'stacked') {\n const {lineData} = lineTransform(\n result.table,\n xColumn,\n yColumn,\n groupKey,\n colorHexes,\n properties.position\n )\n const [fillColumn] = createGroupIDColumn(result.table, groupKey)\n return getDomainDataFromLines(lineData, [...fillColumn], DomainLabel.Y)\n }\n return result.table.getColumn(yColumn, 'number')\n }, [\n result.table,\n xColumn,\n yColumn,\n groupKey,\n colorHexes,\n properties.position,\n ])\n\n const [yDomain, onSetYDomain, onResetYDomain] = useVisYDomainSettings(\n storedYDomain,\n memoizedYColumnData\n )\n\n const legendColumns = filterNoisyColumns(\n properties.position === 'stacked'\n ? [\n ...groupKey,\n xColumn,\n yColumn,\n `_${STACKED_LINE_CUMULATIVE}`,\n `_${LINE_COUNT}`,\n ]\n : [...groupKey, xColumn, yColumn],\n result.table\n )\n\n const xFormatter = getFormatter(result.table.getColumnType(xColumn), {\n prefix: properties.axes.x.prefix,\n suffix: properties.axes.x.suffix,\n base: properties.axes.x.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const yFormatter = getFormatter(result.table.getColumnType(yColumn), {\n prefix: properties.axes.y.prefix,\n suffix: properties.axes.y.suffix,\n base: properties.axes.y.base,\n timeZone,\n timeFormat: properties.timeFormat,\n })\n\n const currentTheme = theme === 'light' ? VIS_THEME_LIGHT : VIS_THEME\n\n if (!isValidView) {\n return \n }\n\n const latestValues = getLatestValues(result.table)\n const latestValue = latestValues[0]\n\n const {bgColor: backgroundColor, textColor} = generateThresholdsListHexs({\n colors: properties.colors,\n lastValue: latestValue,\n cellType: 'single-stat',\n })\n\n const config: Config = {\n ...currentTheme,\n table: result.table,\n xAxisLabel: properties.axes.x.label,\n yAxisLabel: properties.axes.y.label,\n xDomain,\n onSetXDomain,\n onResetXDomain,\n yDomain,\n onSetYDomain,\n onResetYDomain,\n ...axisTicksOptions,\n legendColumns,\n legendOpacity: tooltipOpacity,\n legendOrientationThreshold: tooltipOrientationThreshold,\n legendColorizeRows: tooltipColorize,\n legendHide: tooltipHide,\n staticLegend,\n valueFormatters: {\n [xColumn]: xFormatter,\n [yColumn]: yFormatter,\n },\n layers: [\n {\n type: 'line',\n x: xColumn,\n y: yColumn,\n fill: groupKey,\n interpolation,\n position: properties.position,\n colors: colorHexes,\n shadeBelow: !!properties.shadeBelow,\n shadeBelowOpacity: 0.08,\n hoverDimension: properties.hoverDimension,\n },\n ],\n }\n\n const statLayer: SingleStatLayerConfig = {\n type: 'single stat',\n prefix: properties.prefix,\n suffix: properties.suffix,\n decimalPlaces: properties.decimalPlaces,\n textColor: textColor,\n textOpacity: 100,\n backgroundColor: backgroundColor ? backgroundColor : '',\n svgTextStyle: {\n fontSize: '100',\n fontWeight: 'lighter',\n dominantBaseline: 'middle',\n textAnchor: 'middle',\n letterSpacing: '-0.05em',\n },\n svgTextAttributes: {\n 'data-testid': 'single-stat--text',\n },\n }\n\n config.layers.push(statLayer)\n\n // adding this *after* the statLayer, it has to be the top layer\n // for clicking to edit to function. (if it is not the top layer it shows,\n // but the annotations are not editable)\n\n addAnnotationLayer(\n config,\n inAnnotationMode,\n cellID,\n xColumn,\n yColumn,\n groupKey,\n annotations,\n dispatch,\n 'singleStatWline'\n )\n\n return \n}\n\nexport default SingleStatWithLine\n","import icon from './icon'\nimport properties from './properties'\nimport options from './options'\nimport view from './view'\n\nexport default register => {\n register({\n type: 'line-plus-single-stat',\n name: 'Graph + Single Stat',\n graphic: icon,\n initial: properties,\n component: view,\n options,\n })\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./styles.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC, useContext} from 'react'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {PipeProp} from 'src/types/flows'\nimport {Icon, IconFont, SlideToggle} from '@influxdata/clockface'\nimport {RemoteDataState} from 'src/types'\nimport {Hash, Mapping} from 'src/flows/pipes/Columns'\n\nimport './styles.scss'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\n\nconst View: FC = ({Context}) => {\n const {update, data, results, loading} = useContext(PipeContext)\n\n const updateColumn = (key, val) => {\n if (\n (data.mappings || {})[key] &&\n val.name === key &&\n val.visible === true\n ) {\n delete data.mappings[key]\n update({\n mappings: {...data.mappings},\n })\n return\n }\n\n if (\n (data.mappings || {})[key] &&\n data.mappings[key].name === val.name &&\n data.mappings[key].visible === val.visible\n ) {\n return\n }\n\n if (!data.mappings) {\n data.mappings = {}\n }\n\n data.mappings[key] = val\n update({\n mappings: {...data.mappings},\n })\n }\n\n if (!results.parsed || !results.parsed.table) {\n let msg = UNPROCESSED_PANEL_TEXT\n\n if (loading === RemoteDataState.Loading) {\n msg = 'Loading'\n }\n\n return (\n \n
\n
\n \n
\n
\n
{msg}
\n
\n
\n
\n )\n }\n\n const columns: Hash = Object.entries(data.mappings || {}).reduce(\n (acc, [k, v]) => {\n if (acc[k]) {\n acc[k] = v\n }\n\n return acc\n },\n Object.keys(results.parsed.table.columns).reduce((acc, curr) => {\n acc[curr] = {name: curr, visible: true}\n return acc\n }, {})\n )\n\n const cards = Object.entries(columns).map(([k, v]) => {\n const updateVisibility = () => {\n updateColumn(k, {\n ...v,\n visible: !v.visible,\n })\n }\n const updateName = evt => {\n updateColumn(k, {\n ...v,\n name: evt.target.value,\n })\n }\n\n return (\n
\n \n
\n \n \n
\n
\n )\n })\n\n return (\n \n
{cards}
\n
\n )\n}\nexport default View\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {Icon, IconFont, SlideToggle} from '@influxdata/clockface'\nimport {RemoteDataState} from 'src/types'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\nimport {Hash, Mapping} from 'src/flows/pipes/Columns'\n\n// Contexts\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\n\n// Styles\nimport './styles.scss'\n\nconst Columns: FC = ({Context}) => {\n const {data, loading, results} = useContext(PipeContext)\n\n if (!results.parsed || !results.parsed.table) {\n let msg = UNPROCESSED_PANEL_TEXT\n\n if (loading === RemoteDataState.Loading) {\n msg = 'Loading'\n }\n\n return (\n \n
\n
\n \n
\n
\n
{msg}
\n
\n
\n
\n )\n }\n\n const columns: Hash = Object.entries(data.mappings || {}).reduce(\n (acc, [k, v]) => {\n if (acc[k]) {\n acc[k] = v\n }\n\n return acc\n },\n Object.keys(results.parsed.table.columns).reduce((acc, curr) => {\n acc[curr] = {name: curr, visible: true}\n return acc\n }, {})\n )\n\n const cards = Object.entries(columns).map(([k, v]) => {\n return (\n
\n {}}\n active={v.visible}\n disabled={true}\n />\n

{v.name ?? 'Column Name'}

\n
\n )\n })\n\n return (\n \n
{cards}
\n
\n )\n}\n\nexport default Columns\n","import View from './view'\nimport ReadOnly from './readOnly'\n\nexport interface Hash {\n [column: string]: T\n}\n\nexport interface Mapping {\n name: string\n visible: boolean\n}\n\nexport default register => {\n register({\n type: 'columnEditor',\n family: 'transform',\n component: View,\n button: 'Column Editor',\n initial: {\n mappings: {} as Hash,\n },\n readOnlyComponent: ReadOnly,\n visual: (_data, query) => {\n return `${query} |> limit(n: 100)`\n },\n source: (data, query) => {\n if (!Object.values(data.mappings).length) {\n return query\n }\n\n const mods = Object.entries(data.mappings as Hash).reduce(\n (acc, [k, v]) => {\n if (!v.visible) {\n acc.dropped.push(`\"${k}\"`)\n return acc\n }\n\n acc.renamed.push(`\"${k}\": \"${v.name}\"`)\n return acc\n },\n {\n renamed: [],\n dropped: [],\n }\n )\n\n const splitQuery = query.split('|>')\n\n let queryString = splitQuery[0]\n\n splitQuery.slice(1).map(q => {\n if (q.indexOf('yield') === -1) {\n queryString += `|>${q}`\n } else {\n if (mods.renamed.length) {\n queryString += `|> rename(columns: {${mods.renamed.join(', ')}})\\n`\n }\n\n if (mods.dropped.length) {\n queryString += `|> drop(columns: [${mods.dropped.join(', ')}])\\n`\n }\n queryString += `|> ${q}`\n }\n })\n\n return queryString\n },\n })\n}\n","import React, {FC, useCallback, useContext, useMemo} from 'react'\nimport {\n FlexBox,\n FlexDirection,\n ComponentSize,\n InputLabel,\n IconFont,\n ComponentColor,\n Toggle,\n InputToggleType,\n QuestionMarkTooltip,\n ComponentStatus,\n MultiSelectDropdown,\n} from '@influxdata/clockface'\n\nimport {DURATIONS, FUNCTIONS} from 'src/timeMachine/constants/queryBuilder'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport DurationInput from 'src/shared/components/DurationInput'\n\nimport {PipeProp} from 'src/types/flows'\n\nconst AVAILABLE_FUNCTIONS = FUNCTIONS.map(f => f.name)\n\nconst Downsample: FC = ({Context}) => {\n const {data, update} = useContext(PipeContext)\n const options = useMemo(() => {\n if (!data.functions || !data.functions.length) {\n return [{name: 'mean'}].map(f => f.name)\n }\n return data.functions.map(f => f.name)\n }, [data.functions])\n\n const selectFn = useCallback(\n (fn: string) => {\n const fns = options.map(f => ({name: f}))\n let found = false\n let fnIdx = fns.findIndex(f => f.name === fn)\n\n while (fnIdx !== -1) {\n found = true\n fns.splice(fnIdx, 1)\n fnIdx = fns.findIndex(f => f.name === fn)\n }\n\n if (!found) {\n fns.push({name: fn})\n }\n\n if (!fns.length) {\n fns.push({name: 'mean'})\n }\n\n update({\n functions: fns,\n })\n },\n [options, update]\n )\n\n const setPeriod = _period => {\n update({\n aggregateWindow: {\n ...data.aggregateWindow,\n period: _period,\n },\n })\n }\n\n const toggleFill = () => {\n update({\n aggregateWindow: {\n ...data.aggregateWindow,\n fillValues: !data.aggregateWindow.fillValues,\n },\n })\n }\n\n return (\n \n
\n
\n
Apply aggregate
\n \n
\n
\n
Every Window Period
\n \n \n \n \n \n Fill missing values\n \n \n \n \n
\n
\n
\n )\n}\n\nexport default Downsample\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {\n FlexBox,\n FlexDirection,\n ComponentSize,\n Input,\n InputType,\n InputLabel,\n IconFont,\n ComponentColor,\n Toggle,\n InputToggleType,\n QuestionMarkTooltip,\n ComponentStatus,\n Dropdown,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nimport {PipeProp} from 'src/types/flows'\n\nconst Downsample: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n
\n
\n
Apply aggregate
\n (\n \n {data.functions.map(f => f.name).join(', ')}\n \n )}\n menu={onCollapse => }\n style={{width: '250px'}}\n />\n
\n
\n
Every Window Period
\n \n \n {}}\n color={ComponentColor.Primary}\n size={ComponentSize.ExtraSmall}\n />\n \n \n Fill missing values\n \n \n \n \n
\n
\n
\n )\n}\n\nexport default Downsample\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport ReadOnly from './readOnly'\nimport './style.scss'\n\nimport {FUNCTIONS} from 'src/timeMachine/constants/queryBuilder'\n\nexport default register => {\n register({\n type: 'downsample',\n family: 'transform',\n component: View,\n readOnlyComponent: ReadOnly,\n featureFlag: 'flow-panel--downsample',\n button: 'Downsample',\n initial: {\n functions: [{name: 'mean'}],\n aggregateWindow: {\n period: '',\n fillValues: false,\n },\n },\n source: (data, query) => {\n if (!data.aggregateWindow.period || !data.functions.length) {\n return query\n }\n\n return (\n query +\n data.functions\n .map(fn => {\n const spec = fn && FUNCTIONS.find(f => f.name === fn.name)\n\n if (!spec) {\n return ''\n }\n\n const period = data.aggregateWindow.period\n return spec.flux(\n period === 'auto' || !period ? 'v.windowPeriod' : period,\n data.aggregateWindow.fillValues\n )\n })\n .join('')\n )\n },\n })\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC, useContext, useEffect, useState, useMemo} from 'react'\nimport {useSelector} from 'react-redux'\n\nimport {activeFlags} from 'src/shared/selectors/flags'\nimport {PipeProp} from 'src/types/flows'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {getOrg} from 'src/organizations/selectors'\n\nimport {\n Dropdown,\n ComponentColor,\n ComponentStatus,\n ComponentSize,\n Form,\n FlexBox,\n Input,\n InputType,\n} from '@influxdata/clockface'\n\nimport './style.scss'\n\nexport const REGIONS = [\n {\n label: 'US West (Oregon)',\n group: 'Amazon Web Services',\n value: 'https://us-west-2-1.aws.cloud2.influxdata.com',\n },\n {\n label: 'US East (Virginia)',\n group: 'Amazon Web Services',\n value: 'https://us-east-1-1.aws.cloud2.influxdata.com',\n },\n {\n label: 'Europe West (Frankfurt)',\n group: 'Amazon Web Services',\n value: 'https://eu-central-1-1.aws.cloud2.influxdata.com',\n },\n {\n label: 'US Central (Iowa)',\n group: 'Google Cloud Platform',\n value: 'https://us-central1-1.gcp.cloud2.influxdata.com',\n },\n {\n label: 'Europe West (Belgium)',\n group: 'Google Cloud Platform',\n value: 'https://europe-west1-1.gcp.cloud2.influxdata.com',\n },\n {\n label: 'US East (Virginia)',\n group: 'Microsoft Azure',\n value: 'https://eastus-1.azure.cloud2.influxdata.com',\n },\n {\n label: 'Europe West (Amsterdam)',\n group: 'Microsoft Azure',\n value: 'https://westeurope-1.azure.cloud2.influxdata.com',\n },\n {\n label: 'Tools Cluster',\n group: 'Development',\n flag: 'local-dev',\n value: 'https://influxdb.aws.influxdata.io',\n },\n {label: 'Current Region', value: 'self'},\n {label: 'Self Hosted', value: 'self-hosted'},\n]\n\nconst Source: FC = ({Context}) => {\n const {data, update} = useContext(PipeContext)\n const org = useSelector(getOrg)\n const [error, setError] = useState(false)\n const flags = useSelector(activeFlags)\n\n const updater = option => {\n if (option.value === 'self-hosted') {\n update({\n source: 'custom',\n region: 'https://localhost:8086',\n })\n } else if (option.value === 'self') {\n update({\n source: 'self',\n region: window.location.origin,\n })\n } else {\n update({\n source: 'static',\n region: option.value,\n })\n }\n }\n\n const [options, selected] = useMemo(() => {\n const hashed = JSON.parse(JSON.stringify(REGIONS)).reduce(\n (acc, curr) => {\n if (curr.flag && !flags[curr.flag]) {\n return acc\n }\n\n if (curr.value === data.region) {\n acc.selected = curr\n }\n\n if (!curr.group) {\n acc['no-group'].push(curr)\n return acc\n }\n\n if (!acc[curr.group]) {\n acc[curr.group] = {\n label: curr.group,\n options: [],\n }\n }\n\n acc[curr.group].options.push(curr)\n delete curr.group\n return acc\n },\n {'no-group': []}\n )\n\n const options = Object.entries(hashed).reduce((acc, [k, v]) => {\n if (k === 'selected') {\n return acc\n }\n\n if (k === 'no-group') {\n return acc.concat(v)\n }\n\n acc.push(v)\n return acc\n }, [])\n\n if (data.source === 'custom') {\n return [options, REGIONS[REGIONS.length - 1]]\n }\n\n if (data.source === 'self') {\n return [options, REGIONS[REGIONS.length - 2]]\n }\n\n if (hashed.selected) {\n return [options, hashed.selected]\n }\n\n update({\n source: 'self',\n region: window.location.origin,\n })\n\n data.source = 'self'\n data.region = window.location.origin\n\n return [options, REGIONS[REGIONS.length - 2]]\n }, [data.source, data.region, flags])\n\n useEffect(() => {\n if (data.region === window.location.origin) {\n update({\n org: org.id,\n })\n\n return\n }\n\n if (!data.region || !data.token) {\n return\n }\n\n fetch(`${data.region}/api/v2/orgs`, {\n headers: {\n accept: '*/*',\n 'accept-language': 'en-US,en;q=0.9',\n Authorization: `Token ${data.token}`,\n },\n body: null,\n method: 'GET',\n mode: 'cors',\n }).then(resp => {\n if (resp.status !== 200) {\n setError(true)\n return\n }\n\n if (error) {\n setError(false)\n }\n\n resp.json().then(json => {\n if (!(json.orgs || []).length) {\n return\n }\n\n update({\n org: json.orgs[0].id,\n })\n })\n })\n }, [data.region, data.token])\n\n return (\n \n \n \n
Query another InfluxDB instance
\n

All following panels will use this source

\n \n \n \n (\n \n {selected.label}\n \n )}\n menu={onCollapse => (\n \n {options.reduce((acc, curr) => {\n if (!curr.options) {\n const selected =\n (data.source === 'self' && curr.value === 'self') ||\n (data.source === 'custom' && curr.value === 'custom') ||\n data.region === curr.value\n\n acc.push(\n updater(curr)}\n selected={selected}\n >\n {curr.label}\n \n )\n\n return acc\n }\n\n acc.push(\n \n )\n\n return acc.concat(\n curr.options.map(_curr => {\n const selected =\n (data.source === 'self' && _curr.value === 'self') ||\n (data.source === 'custom' &&\n _curr.value === 'custom') ||\n data.region === _curr.value\n\n return (\n updater(_curr)}\n selected={selected}\n >\n {_curr.label}\n \n )\n })\n )\n }, [])}\n \n )}\n />\n \n \n \n \n update({region: evt.target.value})}\n size={ComponentSize.Medium}\n status={\n data.source !== 'custom'\n ? ComponentStatus.Disabled\n : ComponentStatus.Default\n }\n />\n \n \n {data.region !== window.location.origin && (\n \n \n update({token: evt.target.value})}\n />\n \n \n )}\n
\n {!!error && (\n
\n could not validate token against region\n
\n )}\n
\n )\n}\n\nexport default Source\n","import React, {FC, useContext} from 'react'\n\nimport {PipeProp} from 'src/types/flows'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {REGIONS} from './view'\n\nimport {\n Dropdown,\n ComponentColor,\n ComponentStatus,\n ComponentSize,\n Form,\n FlexBox,\n Input,\n InputType,\n} from '@influxdata/clockface'\n\nimport './style.scss'\n\nconst Source: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n const regionLabel = REGIONS.filter(region => region.value === data.region)[0]\n .label\n\n return (\n \n \n \n
Query another InfluxDB instance
\n

All following panels will use this source

\n \n \n \n (\n \n {regionLabel}\n \n )}\n menu={onCollapse => }\n />\n \n \n \n \n \n \n \n {data.region !== window.location.origin && (\n \n \n \n \n \n )}\n
\n
\n )\n}\n\nexport default Source\n","import View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'region',\n family: 'context',\n component: View,\n featureFlag: 'flow-panel--remote',\n button: 'Remote Database',\n description: 'Queries a remote region using a token',\n initial: {\n type: 'static',\n region: '',\n token: '',\n org: '',\n },\n readOnlyComponent: ReadOnly,\n\n scope: (data, prev) => {\n return {\n ...prev,\n region: data.region,\n token: data.token,\n org: data.org,\n }\n },\n })\n}\n","import React, {FC, useContext} from 'react'\n\nimport {PipeProp} from 'src/types/flows'\nimport {Icon, IconFont} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst Missing: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n
\n
\n \n
\n
\n

\n Missing definition for {data.type}\n

\n

\n The UI doesn't know how to display this panel. Delete this panel to\n remove this message\n

\n
\n
\n
\n )\n}\n\nexport default Missing\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./styles.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport './styles.scss'\n\nexport default register => {\n register({\n type: 'missing',\n family: 'system',\n priority: 1,\n component: View,\n initial: {},\n })\n}\n","import React, {FC, useContext, useEffect, useState} from 'react'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\nimport {\n Dropdown,\n ComponentColor,\n Input,\n InputType,\n ComponentStatus,\n} from '@influxdata/clockface'\nimport {PipeProp} from 'src/types/flows'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\n\nconst SampleCSVs = {\n airSensor: 'Sample Air Sensor Data',\n noaa: 'NOAA National Buoy Data Center (NDBC)',\n usgs: 'USGS Earthquake Data',\n}\n\nconst RemoteCSV: FC = ({Context}) => {\n const [csvHash, setCSVHash] = useState({})\n const {data, update} = useContext(PipeContext)\n const {query} = useContext(FlowQueryContext)\n\n const handleChange = (e: any) => {\n update({url: e.target.value})\n }\n\n const handleSelectFromDropdown = (\n selected: string,\n url: string,\n name: string\n ) => {\n event('Remote CSV Panel (Notebooks)- Selected Option: ' + name)\n update({csvType: selected, url: url ?? '', sampleName: name})\n }\n\n const {csvType, url} = data\n useEffect(() => {\n query(`import \"influxdata/influxdb/sample\"\n sample.list()`).then(res => {\n const columnNames = [\n ...(res.parsed.table.columns.name.data as string[]),\n 'Custom',\n ]\n const columnUrls = res.parsed.table.columns.url.data as string[]\n setCSVHash(\n columnNames.reduce((a, b, idx) => {\n if (SampleCSVs[b]) {\n a[b] = {\n url: columnUrls[idx],\n label: SampleCSVs[b],\n name: b,\n }\n }\n if (b === 'Custom') {\n a[b] = {\n url: '',\n label: 'Custom',\n name: 'Custom',\n }\n }\n return a\n }, {})\n )\n })\n }, [])\n\n return (\n \n
\n
\n (\n \n {csvType.length ? csvType : 'Import Sample CSV'}\n \n )}\n menu={onCollapse => (\n \n {Object.values(csvHash).map(\n (m: {url: string; label: string; name: string}) => {\n return (\n \n handleSelectFromDropdown(m.label, m.url, m.name)\n }\n selected={m.label === csvType}\n >\n {m.label}\n \n )\n }\n )}\n \n )}\n />\n
\n \n
\n
\n
\n
\n )\n}\n\nexport default RemoteCSV\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./styles.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport './styles.scss'\nexport default register => {\n register({\n type: 'remoteCSV',\n family: 'inputs',\n priority: 1,\n component: View,\n featureFlag: 'flowPanelRemoteCsv',\n button: 'Remote CSV',\n initial: {\n csvType: '',\n url: '',\n sampleName: '',\n },\n source: data => {\n if (!data.url?.length) {\n return ''\n }\n const dataQuery =\n data.sampleName === 'Custom'\n ? `import \"experimental/csv\"\n data = csv.from(url: \"${data.url}\")`\n : `import \"influxdata/influxdb/sample\"\n data = sample.data(\n set: \"${data.sampleName}\"\n )`\n return `${dataQuery}\n csvRange = data\n |> keep(columns: [\"_time\"])\n |> group()\n |> reduce(\n fn: (r, accumulator) => ({\n min: if r._time < accumulator.min then r._time else accumulator.min,\n max: if r._time > accumulator.max then r._time else accumulator.max,\n }),\n identity: {min: now(), max: time(v: 0)},\n )\n |> findRecord(fn: (key) => true, idx: 0)\n\n data\n |> range(start: csvRange.min, stop: csvRange.max)`\n },\n })\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./view.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {\n FC,\n useContext,\n useEffect,\n useMemo,\n useState,\n useRef,\n} from 'react'\nimport {Icon, IconFont} from '@influxdata/clockface'\n\n// Components\nimport SearchWidget from 'src/shared/components/search_widget/SearchWidget'\n\n// Utilities\nimport {View} from 'src/visualization'\n\n// Types\nimport {RemoteDataState, SimpleTableViewProperties} from 'src/types'\nimport {PipeProp, FluxResult} from 'src/types/flows'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {SidebarContext} from 'src/flows/context/sidebar'\n\nimport {event} from 'src/cloud/utils/reporting'\nimport {downloadTextFile} from 'src/shared/utils/download'\n\n// Constants\nimport {UNPROCESSED_PANEL_TEXT} from 'src/flows'\n\n// Styles\nimport './view.scss'\n\nconst QueryStat: FC = () => {\n const {loading, results} = useContext(PipeContext)\n const queryStart = useRef(0)\n const [processTime, setProcessTime] = useState(0)\n let tableNum = 0\n\n const tableColumn = results.parsed.table?.getColumn('table') || []\n const lastTableValue = tableColumn[tableColumn.length - 1]\n\n if (typeof lastTableValue === 'string') {\n tableNum = parseInt(lastTableValue) + 1\n } else if (typeof lastTableValue === 'boolean') {\n tableNum = lastTableValue ? 1 : 0\n } else {\n // number\n tableNum = lastTableValue + 1\n }\n\n useEffect(() => {\n if (loading === RemoteDataState.Loading) {\n // start to count\n if (queryStart.current === 0) {\n queryStart.current = Date.now()\n setProcessTime(0)\n }\n return\n }\n\n if (loading === RemoteDataState.Done && queryStart.current !== 0) {\n const timePassed = Date.now() - queryStart.current // ms\n queryStart.current = 0\n setProcessTime(timePassed)\n return\n }\n\n queryStart.current = 0\n setProcessTime(0)\n }, [loading])\n\n const queryStat = {\n tableNum,\n rowNum: results.parsed.table?.length || 0,\n processTime, // ms\n }\n\n if (loading !== RemoteDataState.Done) {\n return null\n }\n\n return (\n
\n {`${queryStat.tableNum} tables`}\n {`${queryStat.rowNum} rows`}\n {`${queryStat.processTime} ms`}\n
\n )\n}\n\nconst Table: FC = ({Context}) => {\n const {id, data, range, loading, results} = useContext(PipeContext)\n const {basic, getPanelQueries} = useContext(FlowQueryContext)\n const {register} = useContext(SidebarContext)\n const [search, setSearch] = useState('')\n\n const dataExists = !!(results?.parsed?.table || []).length\n\n const download = () => {\n event('CSV Download Initiated')\n const query = getPanelQueries(id)\n basic(query?.source, query?.scope).promise.then(response => {\n if (response.type !== 'SUCCESS') {\n return\n }\n\n downloadTextFile(response.csv, 'influx.data', '.csv', 'text/csv')\n })\n }\n\n const res = useMemo(() => {\n if (!search.trim() || !results?.parsed) {\n return results?.parsed\n }\n\n const dupped = {\n fluxGroupKeyUnion: [...results.parsed.fluxGroupKeyUnion],\n resultColumnNames: [...results.parsed.resultColumnNames],\n table: {\n length: 0,\n columns: Object.entries(results.parsed.table.columns).reduce(\n (acc, [k, v]) => {\n acc[k] = {...v, data: []}\n return acc\n },\n {}\n ),\n },\n }\n\n const len = results.parsed.table.length\n const keys = Object.keys(results.parsed.table.columns)\n let newLen = 0,\n ni = 0\n\n const _search = search.toLocaleLowerCase()\n const oldCols = results.parsed.table.columns\n const newCols = dupped.table.columns\n\n for (; ni < len; ni++) {\n if (\n !keys.reduce(\n (acc, curr) =>\n acc ||\n ('' + oldCols[curr].data[ni]).toLocaleLowerCase().includes(_search),\n false\n )\n ) {\n continue\n }\n\n keys.forEach(k => (newCols[k].data[newLen] = oldCols[k].data[ni]))\n newLen++\n }\n\n dupped.table.length = newLen\n\n return dupped as FluxResult['parsed']\n }, [search, results?.parsed])\n\n const loadingText = useMemo(() => {\n if (loading === RemoteDataState.Loading) {\n return 'Loading'\n }\n\n if (loading === RemoteDataState.NotStarted) {\n return UNPROCESSED_PANEL_TEXT\n }\n\n return 'No Data Returned'\n }, [loading])\n\n useEffect(() => {\n if (!id) {\n return\n }\n\n register(id, [\n {\n title: 'Table',\n actions: [\n {\n title: 'Download as CSV',\n disable: !dataExists,\n action: download,\n },\n ],\n },\n ])\n }, [id, data.properties, results.parsed, range])\n\n if (results.error) {\n return (\n \n
\n
\n \n
\n
{results.error}
\n
\n
\n )\n }\n\n if (!dataExists) {\n return (\n \n
\n
\n \n
\n
\n
{loadingText}
\n
\n
\n
\n )\n }\n\n const caveat = (\n \n )\n\n return (\n \n
\n
\n \n \n
\n
\n \n
\n
\n
\n )\n}\n\nexport default Table\n","import View from './view'\nimport {parse, format_from_js_file} from '@influxdata/flux-lsp-browser'\nimport {parseQuery} from 'src/shared/contexts/query'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\nimport {SUPPORTED_VISUALIZATIONS} from 'src/visualization'\n\nexport default register => {\n register({\n type: 'table',\n family: 'passThrough',\n priority: 3,\n component: View,\n button: 'Table',\n initial: {\n properties: SUPPORTED_VISUALIZATIONS['simple-table'].initial,\n },\n visual: (_data, query) => {\n if (!query) {\n return ''\n }\n\n try {\n const ast = isFlagEnabled('fastFlows')\n ? parseQuery(query)\n : parse(query)\n const expressions = ast.body.filter(\n p => p.type === 'ExpressionStatement'\n )\n\n if (!expressions.length) {\n return ''\n }\n\n expressions.forEach(e => {\n let _ast\n if (e.expression?.call?.callee?.name !== 'yield') {\n _ast = parse(`${e.location.source} |> limit(n: 100)`)\n e.expression = _ast.body[0].expression\n e.location = _ast.body[0].location\n return\n }\n\n _ast = parse(\n `${e.expression.argument.location.source} |> limit(n: 100) |> ${e.expression.call.location.source}`\n )\n e.expression = _ast.body[0].expression\n e.location = _ast.body[0].location\n })\n return format_from_js_file(ast)\n } catch (e) {\n console.error(e)\n return ''\n }\n },\n })\n}\n","/*\ntslint:disable no-console\ntslint:disable max-classes-per-file\n*/\n\n// Libraries\nimport React, {Component, ErrorInfo} from 'react'\n\n// Components\nimport DefaultErrorMessage from 'src/shared/components/DefaultErrorMessage'\n\n// Utils\nimport {\n reportErrorThroughHoneyBadger,\n parseComponentName,\n} from 'src/shared/utils/errors'\n\n// Types\nimport {ErrorMessageComponent} from 'src/types'\n\nexport function ErrorHandlingWith(Error: ErrorMessageComponent) {\n return }>(\n constructor: T\n ) => {\n class Wrapped extends constructor {\n public static get displayName(): string {\n return constructor.name\n }\n\n private error: Error = null\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n this.error = error\n this.forceUpdate()\n\n reportErrorThroughHoneyBadger(error, {\n component: parseComponentName(errorInfo),\n })\n }\n\n public render() {\n if (this.error) {\n return \n }\n\n return super.render()\n }\n }\n\n return Wrapped\n }\n}\n\nexport const ErrorHandling = ErrorHandlingWith(DefaultErrorMessage)\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {\n ComponentStatus,\n Form,\n FlexBox,\n Input,\n InputType,\n ComponentSize,\n} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nimport {SafeBlankLink} from 'src/utils/SafeBlankLink'\n\nimport './style.scss'\n\nconst Time: FC = ({Context}) => {\n const {data, update} = useContext(PipeContext)\n\n let startError = ''\n let stopError = ''\n\n if (!data.start) {\n startError = 'Required'\n } else if (\n !/^-(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))+$/g.test(data.start) &&\n !/^([0-9]{4})-([0-9]{2})-([0-9]{2})([Tt]([0-9]{2}):([0-9]{2}):([0-9]{2})(\\\\.[0-9]+)?)?(([Zz]|([+-])([0-9]{2}):([0-9]{2})))?/g.test(\n data.start\n )\n ) {\n startError = 'Invalid Time'\n }\n\n if (!data.stop) {\n stopError = 'Required'\n } else if (\n !/^now\\(\\)$/g.test(data.stop) &&\n !/^-(?:(\\d+(ns|us|µs|ms|s|m|h|d|w|mo|y){1}))+$/g.test(data.stop) &&\n !/^([0-9]{4})-([0-9]{2})-([0-9]{2})([Tt]([0-9]{2}):([0-9]{2}):([0-9]{2})(\\\\.[0-9]+)?)?(([Zz]|([+-])([0-9]{2}):([0-9]{2})))?/g.test(\n data.stop\n )\n ) {\n stopError = 'Invalid Time'\n }\n\n const updateStart = evt => {\n update({\n start: evt.target.value,\n })\n }\n\n const updateStop = evt => {\n update({\n stop: evt.target.value,\n })\n }\n\n return (\n \n \n \n
Set a time frame
\n

\n \n durations\n {' '}\n and{' '}\n \n dates\n {' '}\n are valid\n

\n \n \n \n \n \n \n\n \n \n \n \n \n
\n
\n )\n}\n\nexport default Time\n","import View from './view'\n\nexport default register => {\n register({\n type: 'time',\n family: 'context',\n featureFlag: 'flow-panel--time',\n button: 'Time Range',\n component: View,\n initial: {\n start: '-1h',\n stop: 'now()',\n },\n scope: (data, prev) => {\n return {\n ...prev,\n vars: {\n ...(prev.vars || {}),\n timeRangeStart: data.start,\n timeRangeStop: data.stop,\n },\n }\n },\n })\n}\n","// Libraries\nimport React, {FC, useContext} from 'react'\n\n// Types\nimport {Bucket} from 'src/types'\n\n// Contexts\nimport {BucketProvider} from 'src/shared/contexts/buckets'\nimport {PipeContext} from 'src/flows/context/pipe'\n\n// Components\nimport BucketSelector from 'src/flows/shared/BucketSelector'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\n\nconst ToBucket: FC = () => {\n const {data, update, scope} = useContext(PipeContext)\n const updateBucket = (bucket: Bucket) => {\n event('Updated Bucket', {context: 'to bucket'})\n update({bucket})\n }\n\n return (\n \n
\n \n
\n
\n )\n}\n\nexport default ({Context}) => (\n \n \n \n)\n","// Libraries\nimport React, {FC, useContext} from 'react'\nimport {ComponentStatus, Dropdown, IconFont} from '@influxdata/clockface'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\n// Contexts\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ToBucket: FC = ({Context}) => {\n const {data} = useContext(PipeContext)\n\n return (\n \n
\n
\n (\n \n {data?.bucket?.name ?? 'No Bucket Selected'}\n \n )}\n menu={onCollapse => }\n style={{width: '250px', flex: '0 0 250px'}}\n />\n
\n
\n
\n )\n}\n\nexport default ToBucket\n","import View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'toBucket',\n family: 'output',\n priority: 0,\n component: View,\n readOnlyComponent: ReadOnly,\n featureFlag: 'flow-panel--to-bucket',\n button: 'Output to Bucket',\n output: (data, query) => {\n if (!data?.bucket) {\n return query\n }\n\n return `${query} |> to(bucket: \"${data.bucket?.name.trim()}\")`\n },\n })\n}\n","// Libraries\nimport React, {FC, useState, useContext, useCallback, useEffect} from 'react'\nimport {Input} from '@influxdata/clockface'\n\n// Components\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {SidebarContext} from 'src/flows/context/sidebar'\n\n// Types\nimport {PipeProp} from 'src/types/flows'\n\nconst Youtube: FC = ({Context}) => {\n const {id, data, update} = useContext(PipeContext)\n const {register} = useContext(SidebarContext)\n const [isEditing, setIsEditing] = useState(false)\n const toggleEdit = useCallback(() => {\n setIsEditing(!isEditing)\n }, [setIsEditing, isEditing])\n\n const _update = evt => {\n update({uri: evt.target.value})\n }\n\n useEffect(() => {\n if (!id) {\n return\n }\n\n register(id, [\n {\n title: 'Controls',\n actions: [\n {\n title: 'Edit Youtube ID',\n action: toggleEdit,\n },\n ],\n },\n ])\n }, [id, toggleEdit])\n\n const showEditing = isEditing || !data.uri\n\n return (\n \n
\n {showEditing && (\n
\n \n \n
\n )}\n {!showEditing && (\n \n )}\n
\n
\n )\n}\n\nexport default Youtube\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./style.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import View from './view'\nimport './style.scss'\n\nexport default register => {\n register({\n type: 'youtube',\n family: 'test',\n priority: -1,\n featureFlag: 'flow-panel--youtube',\n button: 'Youtube',\n component: View,\n initial: {\n uri: 'nBHkIWAJitg',\n },\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n FlexBox,\n AlignItems,\n} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updateURL = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n url: evt.target.value,\n },\n })\n }\n\n const updateAccessKey = val => {\n update({\n endpointData: {\n ...data.endpointData,\n accessKey: val,\n },\n })\n }\n\n const updateAuthAlgo = val => {\n update({\n endpointData: {\n ...data.endpointData,\n authAlgo: val,\n },\n })\n }\n\n const updateCredScope = val => {\n update({\n endpointData: {\n ...data.endpointData,\n credScope: val,\n },\n })\n }\n\n const updateSignedHeaders = val => {\n update({\n endpointData: {\n ...data.endpointData,\n signedHeaders: val,\n },\n })\n }\n\n const updateCalcSignature = val => {\n update({\n endpointData: {\n ...data.endpointData,\n calcSignature: val,\n },\n })\n }\n\n const updateEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n email: evt.target.value,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'aws',\n name: 'AWS SES Email',\n data: {\n url: 'https://email.your-aws-region.amazonaws.com/sendemail/v2/email/outbound-emails',\n authAlgo: '',\n accessKey: '',\n credScope: '',\n signedHeaders: '',\n calcSignature: '',\n email: '',\n },\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['http', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'http', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n\t|> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: ((r) => {\n authAlgo = secrets.get(key: \"${data.authAlgo}\")\n accessKey = secrets.get(key: \"${data.accessKey}\")\n credScope = secrets.get(key: \"${data.credScope}\")\n signedHeaders = secrets.get(key: \"${data.signedHeaders}\")\n calcSignature = secrets.get(key: \"${data.calcSignature}\")\n http.post(\n url: \"${data.url}\",\n headers: {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"\\${authAlgo} Credential=\\${accessKey}/\\${credScope},SignedHeaders=\\${signedHeaders},Signature=\\${calcSignature}\"\n },\n data: bytes(v: \"{\n \\\\\"Content\\\\\": {\n \\\\\"Simple\\\\\": {\n \\\\\"Body\\\\\": {\n \\\\\"Text\\\\\": {\n \\\\\"Charset\\\\\": \\\\\"UTF-8\\\\\",\n \\\\\"Data\\\\\": \\\\\"\\${ r._message }\\\\\"\n }\n },\n \\\\\"Subject\\\\\": {\n \\\\\"Charset\\\\\": \\\\\"UTF-8\\\\\",\n \\\\\"Data\\\\\": \\\\\"InfluxDB Alert\\\\\"\n }\n }\n },\n \\\\\"Destination\\\\\": {\n \\\\\"ToAddresses\\\\\": [\n \\\\\"${data.email}\\\\\"\n ]\n }\n }\"))\n })\n )`,\n generateTestQuery: data => `\n authAlgo = secrets.get(key: \"${data.authAlgo}\")\n accessKey = secrets.get(key: \"${data.accessKey}\")\n credScope = secrets.get(key: \"${data.credScope}\")\n signedHeaders = secrets.get(key: \"${data.signedHeaders}\")\n calcSignature = secrets.get(key: \"${data.calcSignature}\")\n http.post(\n url: \"${data.url}\",\n headers: {\n \"Content-type\": \"application/json\",\n \"Authorization\": \"\\${authAlgo} Credential=\\${accessKey}/\\${credScope},SignedHeaders=\\${signedHeaders},Signature=\\${calcSignature}\"\n },\n data: bytes(v: \"{\n \\\\\"Content\\\\\": {\n \\\\\"Simple\\\\\": {\n \\\\\"Body\\\\\": {\n \\\\\"Text\\\\\": {\n \\\\\"Charset\\\\\": \\\\\"UTF-8\\\\\",\n \\\\\"Data\\\\\": \\\\\"${TEST_NOTIFICATION}\\\\\"\n }\n },\n \\\\\"Subject\\\\\": {\n \\\\\"Charset\\\\\": \\\\\"UTF-8\\\\\",\n \\\\\"Data\\\\\": \\\\\"InfluxDB Alert\\\\\"\n }\n }\n },\n \\\\\"Destination\\\\\": {\n \\\\\"ToAddresses\\\\\": [\n \\\\\"${data.email}\\\\\"\n ]\n }\n }\"))\n\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n FlexBox,\n Input,\n InputType,\n ComponentSize,\n SelectGroup,\n FlexDirection,\n AlignItems,\n} from '@influxdata/clockface'\n\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updater = (field, value) => {\n update({\n endpointData: {\n ...data.endpointData,\n [field]: value,\n },\n })\n }\n\n const updateUrl = evt => {\n updater('url', evt.target.value)\n }\n\n const updateAuth = (auth: string) => {\n updater('auth', auth)\n }\n\n const updateUsername = val => {\n updater('username', val)\n }\n\n const updatePassword = val => {\n updater('password', val)\n }\n\n const updateToken = val => {\n updater('token', val)\n }\n\n let submenu\n\n if (data.endpointData.auth === 'basic') {\n submenu = (\n <>\n \n \n \n \n \n \n \n )\n } else if (data.endpointData.auth === 'bearer') {\n submenu = (\n \n \n \n )\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n None\n \n \n Basic\n \n \n Bearer\n \n \n \n \n \n {submenu}\n \n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n FlexBox,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n SelectGroup,\n FlexDirection,\n AlignItems,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n let submenu\n\n if (data.endpointData.auth === 'basic') {\n submenu = (\n <>\n \n \n \n \n \n \n \n )\n } else if (data.endpointData.auth === 'bearer') {\n submenu = (\n \n \n \n )\n }\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n {}}\n active={data.endpointData.auth === 'none'}\n disabled\n >\n None\n \n {}}\n active={data.endpointData.auth === 'basic'}\n disabled\n >\n Basic\n \n {}}\n active={data.endpointData.auth === 'bearer'}\n disabled\n >\n Bearer\n \n \n \n \n \n {submenu}\n \n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'http',\n name: 'HTTP Post',\n data: {\n auth: 'none',\n username: '',\n password: '',\n token: '',\n url: 'https://www.example.com/endpoint',\n },\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => {\n const headers = [['\"Content-Type\"', '\"application/json\"']]\n let prefixSecrets = ''\n\n if (data.auth === 'basic') {\n headers.push(['Authorization', 'auth'])\n prefixSecrets = `\n username = secrets.get(key: \"${data.username}\")\n password = secrets.get(key: \"${data.password}\")\n auth = http.basicAuth(u: username, p: password)\n `\n }\n\n if (data.auth === 'bearer') {\n headers.push(['Authorization', `\"Bearer \\${token}\"`])\n prefixSecrets = `\n token = secrets.get(key: \"${data.token}\")\n `\n }\n\n const _headers = headers\n .reduce((acc, curr) => {\n acc.push(`${curr[0]}: ${curr[1]}`)\n return acc\n }, [])\n .join(', ')\n\n const out = `\n ${prefixSecrets}\n task_data\n |> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n |> monitor[\"check\"](\n data: check,\n messageFn: messageFn,\n crit: trigger,\n )\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n |> monitor[\"notify\"](data: notification, endpoint: http.endpoint(url: \"${data.url}\")(\n mapFn: (r) => {\n body = {r with _version: 1}\n return {headers: {${_headers}}, data: json.encode(v: body)}\n }))\n `\n return out\n },\n generateTestQuery: data => {\n const headers = [['\"Content-Type\"', '\"application/json\"']]\n let prefixSecrets = ''\n\n if (data.auth === 'basic') {\n headers.push(['Authorization', 'auth'])\n prefixSecrets = `\n username = secrets.get(key: \"${data.username}\")\n password = secrets.get(key: \"${data.password}\")\n auth = http.basicAuth(u: username, p: password)\n `\n }\n\n if (data.auth === 'bearer') {\n headers.push(['Authorization', `\"Bearer \\${token}\"`])\n prefixSecrets = `\n token = secrets.get(key: \"${data.token}\")\n `\n }\n\n const _headers = headers\n .reduce((acc, curr) => {\n acc.push(`${curr[0]}: ${curr[1]}`)\n return acc\n }, [])\n .join(', ')\n\n return `\n ${prefixSecrets}\n http.post(\n url: \"${data.url}\",\n headers: {${_headers}},\n data: json.encode(v: { msg: \"${TEST_NOTIFICATION}\"})\n )\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")\n `\n },\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {Form, Input, InputType, ComponentSize} from '@influxdata/clockface'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updateDomain = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n domain: evt.target.value,\n },\n })\n }\n\n const updateAPIKey = val => {\n update({\n endpointData: {\n ...data.endpointData,\n apiKey: val,\n },\n })\n }\n\n const updateEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n email: evt.target.value,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'mailgun',\n name: 'Mailgun Email',\n data: {\n domain: '',\n apiKey: '',\n email: '',\n },\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['http', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'http', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => {\n const subject = encodeURIComponent('InfluxDB Alert')\n const fromEmail = `mailgun@${data.domain}`\n\n return `apiKey = secrets.get(key: \"${data.apiKey}\")\nauth = http.basicAuth(u: \"api\", p: \"\\${apiKey}\")\n\ntask_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n\t|> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: http.endpoint(url: \"https://api.mailgun.net/v3/${data.domain}/messages\")(\n mapFn: (r) => {\n data = strings.joinStr(arr: [\n \"from=${fromEmail}\",\n \"to=${data.email}\",\n \"subject=${subject}\",\n \"text=\\${r._message}\"\n ], v: \"&\"\n )\n return {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"Authorization\": \"\\${auth}\"\n },\n data: bytes(v: data)\n }\n })\n )`\n },\n generateTestQuery: data => {\n const subject = encodeURIComponent('InfluxDB Alert')\n const message = encodeURIComponent(TEST_NOTIFICATION)\n const fromEmail = `mailgun@${data.domain}`\n\n return `apiKey = secrets.get(key: \"${data.apiKey}\")\nauth = http.basicAuth(u: \"api\", p: \"\\${apiKey}\")\nurl = \"https://api.mailgun.net/v3/${data.domain}/messages\"\ndata = strings.joinStr(arr: [\n \"from=${fromEmail}\",\n \"to=${data.email}\",\n \"subject=${subject}\",\n \"text=${message}\"\n], v: \"&\"\n)\n\nhttp.post(\n url: url,\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n \"Authorization\": \"\\${auth}\"\n },\n data: bytes(v: data)\n)\n\narray.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")\n`\n },\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {Form, Input, InputType, ComponentSize} from '@influxdata/clockface'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updateAPIKey = val => {\n update({\n endpointData: {\n ...data.endpointData,\n apiKey: val,\n },\n })\n }\n\n const updateAPISecret = val => {\n update({\n endpointData: {\n ...data.endpointData,\n apiSecret: val,\n },\n })\n }\n\n const updateEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n email: evt.target.value,\n },\n })\n }\n\n const updateFromEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n fromEmail: evt.target.value,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'mailjet',\n name: 'Mailjet Email',\n data: {\n url: 'https://api.mailjet.com/v3.1/send',\n apiKey: '',\n apiSecret: '',\n email: '',\n fromEmail: 'alerts@influxdata.com',\n },\n featureFlag: 'notebooksNewEndpoints',\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n |> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: http.endpoint(url: \"${data.url}\")(\n mapFn: (r) => {\n apiKey = secrets.get(key: \"${data.apiKey}\")\n apiSecret = secrets.get(key: \"${data.apiSecret}\")\n auth = http.basicAuth(u: apiKey, p: apiSecret)\n\n return {\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": auth\n },\n data: json.encode(v: {\n \"Messages\": [{\n \"From\": {\n \"Email\": \"${data.fromEmail}\"\n },\n \"To\": [{\n \"Email\": \"${data.email}\"\n }],\n \"Subject\": \"InfluxDB Alert\",\n \"TextPart\": r._message\n }]\n })\n }\n }\n )\n )`,\n generateTestQuery: data => `\n apiKey = secrets.get(key: \"${data.apiKey}\")\n apiSecret = secrets.get(key: \"${data.apiSecret}\")\n auth = http.basicAuth(u: apiKey, p: apiSecret)\n\n http.post(\n url: \"${data.url}\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": auth\n },\n data: json.encode(v: {\n \"Messages\": [{\n \"From\": {\n \"Email\": \"${data.fromEmail}\"\n },\n \"To\": [{\n \"Email\": \"${data.email}\"\n }],\n \"Subject\": \"InfluxDB Alert\",\n \"TextPart\": \"${TEST_NOTIFICATION}\"\n }]\n }))\n\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {useSelector} from 'react-redux'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n FlexBox,\n FlexDirection,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {getOrg} from 'src/organizations/selectors'\nimport {EndpointProps} from 'src/types'\n\nconst View: FC = () => {\n const {data, update} = useContext(PipeContext)\n const org = useSelector(getOrg)\n\n const updater = (field, value) => {\n update({\n endpointData: {\n ...data.endpointData,\n [field]: value,\n },\n })\n }\n\n const updateUrl = evt => {\n updater('url', evt.target.value)\n }\n\n const updateKey = evt => {\n updater('key', evt.target.value)\n }\n\n const defaultEndpoint = `${window.location.origin}/org/${org.id}/alert-history`\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n FlexBox,\n FlexDirection,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'pagerduty',\n name: 'PagerDuty',\n data: {\n url: '',\n key: '',\n level: 'warning',\n },\n component: View,\n readOnlyComponent: ReadOnly,\n generateTestImports: () =>\n ['array', 'pagerduty', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateImports: () =>\n ['pagerduty', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n |> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n crit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](data: notification, endpoint: pagerduty.endpoint()(mapFn: (r) => ({ r with\n routingKey: \"${data.key}\",\n client: \"influxdata\",\n clientURL: \"${data.url}\",\n class: r._check_name,\n group: r[\"_source_measurement\"],\n severity: pagerduty[\"severityFromLevel\"](level: \"${data.level}\"),\n eventAction: pagerduty[\"actionFromLevel\"](level: \"${data.level}\"),\n source: notification[\"_notification_rule_name\"],\n summary: r[\"_message\"],\n timestamp: time(v: r[\"_source_timestamp\"]),\n })))`,\n generateTestQuery: data => `pagerduty.sendEvent(\n pagerdutyURL: \"https://events.pagerduty.com/v2/enqueue\",\n routingKey: \"${data.key}\",\n client: \"influxdata\",\n clientURL: \"${data.url}\",\n dedupKey: \"${new Date().toISOString()}\",\n class: \"check_name\",\n group: \"test_measurement\",\n severity: \"critical\",\n eventAction: \"trigger\",\n source: \"Notebook Generated Test Notification\",\n component: \"example-component\",\n summary: \"${TEST_NOTIFICATION}\",\n timestamp: \"${new Date().toISOString()}\",\n customDetails: {}\n )\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")\n `,\n })\n}\n","// Types\nimport {\n Run,\n LogEvent,\n TaskOptionKeys,\n RemoteDataState,\n TaskEntities,\n} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nexport const SET_TASKS = 'SET_TASKS'\nexport const EDIT_TASK = 'EDIT_TASK'\nexport const SET_TASK_OPTION = 'SET_TASK_OPTION'\nexport const SET_ALL_TASK_OPTIONS = 'SET_ALL_TASK_OPTIONS'\nexport const CLEAR_TASK = 'CLEAR_TASK'\nexport const CLEAR_CURRENT_TASK = 'CLEAR_CURRENT_TASK'\nexport const SET_NEW_SCRIPT = 'SET_NEW_SCRIPT'\nexport const SET_CURRENT_SCRIPT = 'SET_CURRENT_SCRIPT'\nexport const SET_CURRENT_TASK = 'SET_CURRENT_TASK'\nexport const SET_SEARCH_TERM = 'SET_SEARCH_TERM'\nexport const SET_SHOW_INACTIVE = 'SET_SHOW_INACTIVE'\nexport const SET_RUNS = 'SET_RUNS'\nexport const SET_LOGS = 'SET_LOGS'\nexport const REMOVE_TASK = 'REMOVE_TASK'\nexport const ADD_TASK = 'ADD_TASK'\nexport const SET_CURRENT_TASKS_PAGE = 'SET_CURRENT_TASKS_PAGE'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// R is the type of the value of the \"result\" key in normalizr's normalization\ntype TasksSchema = NormalizedSchema<\n TaskEntities,\n R\n>\nexport const setTasks = (\n status: RemoteDataState,\n schema?: TasksSchema\n) =>\n ({\n type: SET_TASKS,\n status,\n schema,\n } as const)\n\nexport const addTask = (schema: TasksSchema) =>\n ({\n type: ADD_TASK,\n schema,\n } as const)\n\nexport const editTask = (schema: TasksSchema) =>\n ({\n type: EDIT_TASK,\n schema,\n } as const)\n\nexport const removeTask = (id: string) =>\n ({\n type: REMOVE_TASK,\n id,\n } as const)\n\nexport const setCurrentTask = (schema: TasksSchema) =>\n ({\n type: SET_CURRENT_TASK,\n schema,\n } as const)\n\nexport const clearCurrentTask = () =>\n ({\n type: CLEAR_CURRENT_TASK,\n } as const)\n\nexport const setTaskOption = (taskOption: {\n key: TaskOptionKeys\n value: string\n}) =>\n ({\n type: SET_TASK_OPTION,\n ...taskOption,\n } as const)\n\nexport const setAllTaskOptions = (schema: TasksSchema) =>\n ({\n type: SET_ALL_TASK_OPTIONS,\n schema,\n } as const)\n\nexport const clearTask = () =>\n ({\n type: CLEAR_TASK,\n } as const)\n\nexport const setNewScript = (script: string) =>\n ({\n type: SET_NEW_SCRIPT,\n script,\n } as const)\n\nexport const setCurrentScript = (script: string) =>\n ({\n type: SET_CURRENT_SCRIPT,\n script,\n } as const)\n\nexport const setSearchTerm = (searchTerm: string) =>\n ({\n type: SET_SEARCH_TERM,\n searchTerm,\n } as const)\n\nexport const setShowInactive = () =>\n ({\n type: SET_SHOW_INACTIVE,\n } as const)\n\nexport const setRuns = (runs: Run[], runStatus: RemoteDataState) =>\n ({\n type: SET_RUNS,\n runs,\n runStatus,\n } as const)\n\nexport const setLogs = (logs: LogEvent[]) =>\n ({\n type: SET_LOGS,\n logs,\n } as const)\n\nexport enum TaskPage {\n TasksPage = 'TasksPage',\n TaskRunsPage = 'TaskRunsPage',\n}\nexport const setCurrentTasksPage = (page: TaskPage) =>\n ({\n type: SET_CURRENT_TASKS_PAGE,\n tasksPage: page,\n } as const)\n","import React, {FC, useContext} from 'react'\nimport {Form, Input, InputType, ComponentSize} from '@influxdata/clockface'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updateAPIKey = val => {\n update({\n endpointData: {\n ...data.endpointData,\n apiKey: val,\n },\n })\n }\n\n const updateEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n email: evt.target.value,\n },\n })\n }\n\n const updateFromEmail = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n fromEmail: evt.target.value,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'sendgrid',\n name: 'SendGrid Email',\n data: {\n url: 'https://api.sendgrid.com/v3/mail/send',\n apiKey: '',\n email: '',\n fromEmail: 'alerts@influxdata.com',\n },\n featureFlag: 'notebooksNewEndpoints',\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'http', 'influxdata/influxdb/secrets', 'json']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n |> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n |> monitor[\"notify\"](\n data: notification,\n endpoint: http.endpoint(url: \"${data.url}\")(\n mapFn: (r) => {\n apiKey = secrets.get(key: \"${data.apiKey}\")\n return {\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"Bearer \\${apiKey}\"\n },\n data: json.encode(v: {\n \"personalizations\": [\n {\n \"to\": [\n {\n \"email\": \"${data.email}\"\n }\n ],\n \"subject\": \"InfluxDB Alert\",\n }\n ],\n \"from\": {\n \"email\": \"${data.fromEmail}\"\n },\n \"content\": [\n {\n \"type\": \"text/plain\",\n \"value\": r._message\n }\n ]\n })\n }\n }\n )\n )`,\n generateTestQuery: data => `\n apiKey = secrets.get(key: \"${data.apiKey}\")\n http.post(\n url: \"${data.url}\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": \"Bearer \\${apiKey}\"\n },\n data: json.encode(v: {\n \"personalizations\": [\n {\n \"to\": [\n {\n \"email\": \"${data.email}\"\n }\n ],\n \"subject\": \"InfluxDB Alert\"\n }\n ],\n \"from\": {\n \"email\": \"${data.fromEmail}\"\n },\n \"content\": [\n {\n \"type\": \"text/plain\",\n \"value\": \"${TEST_NOTIFICATION}\"\n }\n ]\n })\n )\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {\n ColorPreview,\n CreatableTypeAheadDropdown,\n FlexBox,\n Form,\n Input,\n InputType,\n ComponentSize,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {EndpointProps} from 'src/types'\n\n/** The hex colors are suggested from here\n * https://github.com/influxdata/ui/issues/2572\n */\nconst suggestedColors = ['#DC4E58', '#FFB94A', '#2FA74D', '#0098F0', '#8E1FC3']\n\nconst View: FC = () => {\n const {data, update} = useContext(PipeContext)\n\n const updateUrl = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n url: evt.target.value,\n },\n })\n }\n\n const updateChannel = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n channel: evt.target.value,\n },\n })\n }\n\n const updateColor = hex => {\n update({\n endpointData: {\n ...data.endpointData,\n color: hex,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n (\n \n \n
\n {displayText}\n
\n
\n )}\n />\n
\n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'slack',\n name: 'Slack',\n data: {\n url: 'https://hooks.slack.com/services/X/X/X',\n channel: '',\n color: '#34BB55',\n },\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () => ['slack'].map(i => `import \"${i}\"`).join('\\n'),\n generateTestImports: () =>\n ['array', 'slack'].map(i => `import \"${i}\"`).join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n\t|> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: slack[\"endpoint\"](url: \"${data.url}\")(mapFn: (r) => ({\n channel: \"${data.channel || ''}\",\n text: \"\\${ r._message }\",\n color: \"${data.color || '#34BB55'}\"\n }))\n )`,\n generateTestQuery: data => `\n slack.message(\n url: \"${data.url}\",\n channel: \"${data.channel || ''}\",\n text: \"${TEST_NOTIFICATION}\",\n color: \"${data.color || '#34BB55'}\"\n )\n\n array.from(rows: [{value: 0}])\n\t|> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {Form, Input, InputType, ComponentSize} from '@influxdata/clockface'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\nimport {EndpointProps} from 'src/types'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n\n const updateURL = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n url: evt.target.value,\n },\n })\n }\n\n const updateChannel = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n channel: evt.target.value,\n },\n })\n }\n\n const updateToken = val => {\n update({\n endpointData: {\n ...data.endpointData,\n token: val,\n },\n })\n }\n\n const updateParseMode = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n parseMode: evt.target.value,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\n\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'telegram',\n name: 'Telegram',\n data: {\n url: 'https://api.telegram.org/bot',\n channel: '',\n token: '',\n parseMode: 'MarkdownV2',\n },\n featureFlag: 'notebooksNewEndpoints',\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['contrib/sranka/telegram', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'contrib/sranka/telegram', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n\t|> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: telegram[\"endpoint\"](\n url: \"${data.url}\",\n token: secrets.get(key: \"${data.token}\"),\n parseMode: \"${data.parseMode}\",\n disableWebPagePreview: false\n )(\n mapFn: (r) => ({\n channel: \"${data.channel}\",\n text: \"\\${ r._message }\",\n silent: true\n }))\n )`,\n generateTestQuery: data => `\n telegram.message(\n url: \"${data.url}\",\n token: secrets.get(key: \"${data.token}\"),\n parseMode: \"${data.parseMode}\",\n channel: \"${data.channel}\",\n text: \"${TEST_NOTIFICATION}\",\n disableWebPagePreview: false,\n silent: true\n )\n\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentColor,\n IconFont,\n Dropdown,\n} from '@influxdata/clockface'\nimport SecretsDropdown from 'src/secrets/components/SecretsDropdown'\n\nimport {EndpointProps} from 'src/types'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst View: FC = ({createSecret, secrets}) => {\n const {data, update} = useContext(PipeContext)\n const severities = ['Critical', 'Warning', 'Info', 'Clear']\n\n const updateURL = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n url: evt.target.value,\n },\n })\n }\n\n const updateUsername = val => {\n update({\n endpointData: {\n ...data.endpointData,\n username: val,\n },\n })\n }\n\n const updatePassword = val => {\n update({\n endpointData: {\n ...data.endpointData,\n password: val,\n },\n })\n }\n\n const updateAction = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n action: evt.target.value,\n },\n })\n }\n\n const updateMethod = evt => {\n update({\n endpointData: {\n ...data.endpointData,\n method: evt.target.value,\n },\n })\n }\n\n const updateSeverity = val => {\n update({\n endpointData: {\n ...data.endpointData,\n severity: val,\n },\n })\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n (\n \n {data.endpointData.severity !== ''\n ? data.endpointData.severity\n : 'Choose a severity'}\n \n )}\n menu={onCollapse => (\n \n {severities.map(s => (\n \n {s}\n \n ))}\n \n )}\n />\n \n \n \n \n \n \n \n
\n )\n}\n\nexport default View\n","import React, {FC, useContext} from 'react'\nimport {\n Form,\n Input,\n InputType,\n ComponentSize,\n ComponentStatus,\n} from '@influxdata/clockface'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nconst ReadOnly: FC = () => {\n const {data} = useContext(PipeContext)\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default ReadOnly\n","import {TEST_NOTIFICATION} from 'src/flows/pipes/Notification/endpoints'\nimport View from './view'\nimport ReadOnly from './readOnly'\n\nexport default register => {\n register({\n type: 'zenoss',\n name: 'Zenoss',\n data: {\n url: 'https://example.zenoss.io:8080/zport/dmd/evconsole_router',\n username: '',\n password: '',\n action: '',\n method: '',\n severity: '',\n },\n featureFlag: 'notebooksNewEndpoints',\n component: View,\n readOnlyComponent: ReadOnly,\n generateImports: () =>\n ['contrib/bonitoo-io/zenoss', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateTestImports: () =>\n ['array', 'contrib/bonitoo-io/zenoss', 'influxdata/influxdb/secrets']\n .map(i => `import \"${i}\"`)\n .join('\\n'),\n generateQuery: (data, measurement) => `task_data\n\t|> schema[\"fieldsAsCols\"]()\n |> set(key: \"_notebook_link\", value: \"${window.location.href}\")\n |> filter(fn: ${measurement})\n\t|> monitor[\"check\"](\n\t\tdata: check,\n\t\tmessageFn: messageFn,\n\t\tcrit: trigger,\n\t)\n |> filter(fn: trigger)\n |> keep(columns: [\"_value\", \"_time\", \"_measurement\"])\n |> limit(n: 1, offset: 0)\n\t|> monitor[\"notify\"](\n data: notification,\n endpoint: zenoss[\"endpoint\"](\n url: \"${data.url}\",\n username: secrets.get(key: \"${data.username}\"),\n password: secrets.get(key: \"${data.password}\"),\n action: \"${data.action}\",\n method: \"${data.method}\",\n )(\n mapFn: (r) => ({\n message: \"\\${ r._message }\",\n severity: \"${data.severity}\",\n summary: \"${data.severity} event for \\${ r.host }\",\n device: \"\\${ r.deviceID }\",\n component: \"\\${ r.host }\",\n eventClass: \"/App\",\n eventClassKey: \"\",\n collector: \"\",\n }))\n )`,\n generateTestQuery: data => `\n telegram.endpoint(\n url: \"${data.url}\",\n username: secrets.get(key: \"${data.username}\"),\n password: secrets.get(key: \"${data.password}\"),\n action: \"${data.action}\",\n method: \"${data.method}\",\n message: \"${TEST_NOTIFICATION}\",\n severity: \"${data.severity}\",\n )\n\n array.from(rows: [{value: 0}])\n |> yield(name: \"ignore\")`,\n })\n}\n","import React, {FC} from 'react'\nconst SimpleTableOption: FC = () => {\n return
There is nothing to configure here
\n}\n\nexport default SimpleTableOption\n","import React from 'react'\n\nconst icon = (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n)\n\nexport default icon\n","import {FluxDataType} from '@influxdata/giraffe'\n\nimport options from './options'\nimport view from './view'\nimport icon from './icon'\n\nexport interface SimpleTableViewProperties {\n type: 'simple-table'\n showAll: boolean\n}\n\ninterface SubsetTableColumn {\n name: string\n type: string\n fluxDataType: FluxDataType\n data: Array\n group: boolean\n}\n\nexport interface SubsetTable {\n idx: number\n yield: string\n start: number\n end: number\n signature: string\n cols: SubsetTableColumn[]\n}\n\nexport default register => {\n register({\n type: 'simple-table',\n name: 'Simple Table',\n graphic: icon,\n initial: {type: 'simple-table', showAll: false},\n component: view,\n options,\n })\n}\n","import React from 'react'\n\nexport default () =>

script editor

\n","import {ResourceType} from 'src/types/resources'\nimport editor from './editor'\nimport {CLOUD} from 'src/shared/constants'\nimport {DEFAULT_EDITOR_TEXT} from 'src/dataExplorer/context/persistance'\n\nconst {getScript, patchScript, postScript} = CLOUD\n ? require('src/client/scriptsRoutes')\n : {\n getScript: false,\n patchScript: false,\n postScript: false,\n }\n\nexport default function script(register) {\n register({\n type: ResourceType.Scripts,\n editor,\n init: id => {\n if (!id || !CLOUD) {\n return Promise.resolve({\n type: ResourceType.Scripts,\n flux: DEFAULT_EDITOR_TEXT,\n data: {},\n })\n }\n\n return getScript({\n scriptID: id,\n }).then(resp => {\n if (resp.status === 200) {\n return {\n type: ResourceType.Scripts,\n flux: resp.data.script,\n data: resp.data,\n }\n }\n\n return {\n type: ResourceType.Scripts,\n flux: DEFAULT_EDITOR_TEXT,\n data: {},\n }\n })\n },\n persist: resource => {\n const data = JSON.parse(JSON.stringify(resource.data))\n data.script = resource.flux\n\n if (!CLOUD) {\n return resource\n }\n\n if (data.id) {\n return patchScript({\n scriptID: data.id,\n data: {\n name: data.name,\n description: data.description,\n script: data.script,\n },\n }).then(() => {\n return resource\n })\n }\n\n return postScript({\n data: {\n name: data.name,\n description: data.description,\n script: data.script,\n language: 'flux',\n },\n }).then(resp => {\n if (resp.status === 201) {\n return {\n ...resource,\n data: {\n ...data,\n id: resp.data.id,\n },\n }\n }\n\n return resource\n })\n },\n })\n}\n","// Functions calling API\nimport {\n getAccount,\n getAccounts,\n getAccountsOrgs,\n getIdentity,\n getMe as getMeQuartz,\n getOrg,\n putAccountsDefault,\n putAccountsOrgsDefault,\n Account,\n Identity,\n IdentityAccount,\n IdentityUser,\n Me as MeQuartz,\n Organization,\n OrganizationSummaries,\n} from 'src/client/unityRoutes'\n\nimport {\n getMe as getMeIdpe,\n Error as IdpeError,\n UserResponse as UserResponseIdpe,\n} from 'src/client'\n\n// Feature Flag Check\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Constants\nimport {CLOUD} from 'src/shared/constants'\n\n// Types\nimport {RemoteDataState} from 'src/types'\n\n// Additional properties of the current account, which are not retrieved from /quartz/identity.\nexport interface CurrentAccount extends IdentityAccount {\n billingProvider?: 'zuora' | 'aws' | 'gcm' | 'azure'\n}\n\n// Additional properties of the current org, which are not retrieved from /quartz/identity.\nexport interface CurrentOrg {\n id: string\n clusterHost: string\n name?: string\n creationDate?: string\n description?: string\n isRegionBeta?: boolean\n provider?: string\n regionCode?: string\n regionName?: string\n}\n\nexport interface IdentityState {\n currentIdentity: CurrentIdentity\n quartzOrganizations: QuartzOrganizations\n}\n\nexport type QuartzOrganizations = {\n orgs: OrganizationSummaries\n status?: RemoteDataState\n}\n\nexport interface CurrentIdentity {\n user: IdentityUser\n account: CurrentAccount\n org: CurrentOrg\n status?: RemoteDataState\n}\n\nexport enum NetworkErrorTypes {\n UnauthorizedError = 'UnauthorizedError',\n NotFoundError = 'NotFoundError',\n ServerError = 'ServerError',\n UnprocessableEntity = 'UnprocessableEntity',\n GenericError = 'GenericError',\n}\n\n// 401 error\nexport class UnauthorizedError extends Error {\n constructor(message) {\n super(message)\n this.name = 'UnauthorizedError'\n }\n}\n\n// 404 error\nexport class NotFoundError extends Error {\n constructor(message) {\n super(message)\n this.name = 'NotFoundError'\n }\n}\n\n// 422 error\nexport class UnprocessableEntityError extends Error {\n constructor(message) {\n super(message)\n this.name = 'UnprocessableEntityError'\n }\n}\n\n// 500 error\nexport class ServerError extends Error {\n constructor(message) {\n super(message)\n this.name = 'ServerError'\n }\n}\n\nexport class GenericError extends Error {\n constructor(message) {\n super(message)\n this.name = 'GenericError'\n }\n}\n\nexport const fetchIdentity = async () => {\n if (!CLOUD) {\n return fetchLegacyIdentity()\n }\n\n if (isFlagEnabled('quartzIdentity')) {\n return fetchQuartzIdentity()\n }\n\n return fetchQuartzMe()\n}\n\n// fetch user identity from /quartz/identity.\nexport const fetchQuartzIdentity = async (): Promise => {\n const response = await getIdentity({})\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n const user = response.data\n return user\n}\n\n// fetch user identity from /quartz/me.\nexport const fetchQuartzMe = async (): Promise => {\n const response = await getMeQuartz({})\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 404) {\n throw new NotFoundError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n const user = response.data\n return user\n}\n\n// fetch user identity from IDPE /me (used in OSS and environments without Quartz)\nexport const fetchLegacyIdentity = async (): Promise => {\n const response = await getMeIdpe({})\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n const error: IdpeError = response.data\n throw new ServerError(error.message)\n }\n\n const user = response.data\n return user\n}\n\n// fetch details about one of the user's accounts\nexport const fetchAccountDetails = async (\n accountId: string | number\n): Promise => {\n const accountIdString = accountId.toString()\n\n const response = await getAccount({\n accountId: accountIdString,\n })\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n const accountDetails = response.data\n return accountDetails\n}\n\n// change the user's default account\nexport const updateDefaultQuartzAccount = async (\n accountId: number\n): Promise => {\n const response = await putAccountsDefault({\n data: {\n id: accountId,\n },\n })\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n // success status code is 204; no response body expected.\n}\n\n// fetch details about one of the user's organizations\nexport const fetchOrgDetails = async (orgId: string): Promise => {\n const response = await getOrg({orgId})\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n const orgDetails = response.data\n return orgDetails\n}\n\n// fetch the list of organizations associated with a given account ID\nexport const fetchOrgsByAccountID = async (\n accountNum: number\n): Promise => {\n const accountId = accountNum.toString()\n\n const response = await getAccountsOrgs({\n accountId,\n })\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n return response.data\n}\n\n// update the default org for a given account\nexport const updateDefaultOrgByAccountID = async ({\n accountNum,\n orgId,\n}): Promise => {\n const accountId = accountNum.toString()\n\n const response = await putAccountsOrgsDefault({\n accountId,\n data: {\n id: orgId,\n },\n })\n\n if (response.status === 404) {\n throw new NotFoundError(response.data.message)\n }\n\n if (response.status === 422) {\n throw new UnprocessableEntityError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n\n // success status code is 204; no response body expected.\n}\n\n// fetch user default account's default org\nexport const getDefaultAccountDefaultOrg = async (): Promise<\n OrganizationSummaries[number]\n> => {\n const response = await getAccounts({})\n\n if (response.status === 401) {\n throw new UnauthorizedError(response.data.message)\n }\n\n if (response.status === 500) {\n throw new ServerError(response.data.message)\n }\n const {data} = response\n\n if (Array.isArray(data) && data.length) {\n const defaultAccount = data.find(account => account.isDefault)\n\n // fetch default org\n if (defaultAccount) {\n const quartzOrg = await fetchOrgsByAccountID(defaultAccount.id)\n const defaultQuartzOrg =\n quartzOrg.find(org => org.isDefault) || quartzOrg[0]\n\n return defaultQuartzOrg\n }\n throw new GenericError('No default account found')\n }\n}\n","import React, {SFC} from 'react'\n\ninterface Props {\n message: string\n testID?: string\n}\n\nconst EmptyGraphMessage: SFC = ({message, testID}) => {\n return (\n
\n

{message}

\n
\n )\n}\n\nexport default EmptyGraphMessage\n","// Types\nimport {RemoteDataState, ViewEntities} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\nimport {CellSchema} from 'src/cells/actions/creators'\n\n// Actions\nimport {setDashboard} from 'src/dashboards/actions/creators'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const REMOVE_VIEW = 'REMOVE_VIEW'\nexport const RESET_VIEWS = 'RESET_VIEWS'\nexport const SET_VIEW = 'SET_VIEW'\nexport const SET_VIEWS = 'SET_VIEWS'\nexport const SET_VIEWS_AND_CELLS = 'SET_VIEWS_AND_CELLS'\n\ntype ViewSchema = NormalizedSchema\n\nexport const removeView = (id: string) =>\n ({\n type: REMOVE_VIEW,\n id,\n } as const)\n\nexport const resetViews = () =>\n ({\n type: RESET_VIEWS,\n } as const)\n\nexport const setViews = (\n status: RemoteDataState,\n schema?: ViewSchema\n) =>\n ({\n type: SET_VIEWS,\n status,\n schema,\n } as const)\n\nexport const setView = (\n id: string,\n status: RemoteDataState,\n schema?: ViewSchema\n) =>\n ({\n type: SET_VIEW,\n id,\n status,\n schema,\n } as const)\n\nexport const setViewsAndCells = (\n status: RemoteDataState,\n cellsArray: CellSchema[],\n viewsArray: ViewSchema[]\n) =>\n ({\n type: SET_VIEWS_AND_CELLS,\n cellsArray,\n viewsArray,\n status,\n } as const)\n","// Libraries\nimport {NormalizedSchema} from 'normalizr'\n\n// Types\nimport {RemoteDataState, TelegrafEntities} from 'src/types'\nimport {Action as NotifyAction} from 'src/shared/actions/notifications'\n\nexport const SET_TELEGRAFS = 'SET_TELEGRAFS'\nexport const ADD_TELEGRAF = 'ADD_TELEGRAF'\nexport const EDIT_TELEGRAF = 'EDIT_TELEGRAF'\nexport const REMOVE_TELEGRAF = 'REMOVE_TELEGRAF'\nexport const SET_CURRENT_CONFIG = 'SET_CURRENT_CONFIG'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | NotifyAction\n\nexport const setTelegrafs = (\n status: RemoteDataState,\n schema?: NormalizedSchema\n) =>\n ({\n type: SET_TELEGRAFS,\n status,\n schema,\n } as const)\n\nexport const addTelegraf = (\n schema: NormalizedSchema\n) =>\n ({\n type: ADD_TELEGRAF,\n schema,\n } as const)\n\nexport const editTelegraf = (\n schema: NormalizedSchema\n) =>\n ({\n type: EDIT_TELEGRAF,\n schema,\n } as const)\n\nexport const removeTelegraf = (id: string) =>\n ({\n type: REMOVE_TELEGRAF,\n id,\n } as const)\n\nexport const setCurrentConfig = (status: RemoteDataState, item?: string) =>\n ({\n type: SET_CURRENT_CONFIG,\n status,\n item,\n } as const)\n","// Libraries\nimport {sortBy} from 'lodash'\n\n// Utils\nimport {asAssignment, getAllVariables} from 'src/variables/selectors'\nimport {buildUsedVarsOption} from 'src/variables/utils/buildVarsOption'\nimport {filterUnusedVarsBasedOnQuery} from 'src/shared/utils/filterUnusedVars'\nimport {getWindowVarsFromVariables} from 'src/variables/utils/getWindowVars'\n\n// Types\nimport {\n RunQueryErrorResult,\n RunQueryLimitResult,\n RunQueryResult,\n RunQuerySuccessResult,\n} from 'src/shared/apis/query'\nimport {CancelBox} from 'src/types/promises'\nimport {\n GetState,\n RemoteDataState,\n Variable,\n VariableAssignment,\n} from 'src/types'\nimport {RunQueryPromiseMutex} from 'src/shared/apis/singleQuery'\n\n// Constants\nimport {WINDOW_PERIOD} from 'src/variables/constants'\n\nexport const TIME_INVALIDATION = 1000 * 60 * 10 // 10 minutes\n\nexport const asSimplyKeyValueVariables = (vari: Variable) => {\n if (vari.arguments?.type === 'system') {\n return {[vari.name]: vari.arguments.values || []}\n }\n return {\n [vari.name]: vari.selected || [],\n }\n}\n\n// Hashing function found here:\n// https://jsperf.com/hashcodelordvlad\n// Through this thread:\n// https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript\nexport const hashCode = (rawText: string): string => {\n let hash = 0\n if (!rawText) {\n return `${hash}`\n }\n for (let i = 0; i < rawText.length; i++) {\n hash = (hash << 5) - hash + rawText.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return `${hash}`\n}\n\ntype CacheValue = {\n dateSet: number\n hashedVariables: string\n isCustomTime: boolean\n mutex: ReturnType\n status: RemoteDataState\n error?: string\n values?: RunQuerySuccessResult | null\n}\n\ntype Cache = {\n [queryID: string]: CacheValue\n}\n\nclass QueryCache {\n cache: Cache = {}\n\n private cleanExpiredQueries = (): void => {\n const now = Date.now()\n for (const id in this.cache) {\n // TODO(ariel): need to implement specific rules for custom time ranges\n if (this.cache[id].isCustomTime) {\n continue\n }\n if (now - this.cache[id].dateSet > TIME_INVALIDATION) {\n this.resetCacheByID(id)\n }\n }\n }\n\n getFromCache = (\n id: string,\n hashedVariables: string\n ): RunQueryResult | null => {\n // no existing query match\n if (!this.cache[id]) {\n return null\n }\n // query match with no existing variable match\n if (this.cache[id].hashedVariables !== hashedVariables) {\n this.resetCacheByID(id)\n return null\n }\n // query has been initialized but the result has not been set\n if (this.cache[id].values === undefined) {\n return null\n }\n // query & variable match with an expired result\n if (Date.now() - this.cache[id].dateSet > TIME_INVALIDATION) {\n this.resetCacheByID(id)\n return null\n }\n return this.cache[id].values\n }\n\n initializeCacheByID = (\n queryID: string,\n hashedVariables: string,\n isCustomTime: boolean = false\n ) => {\n if (this.cache[queryID]) {\n return this.cache[queryID]\n }\n this.cache[queryID] = {\n dateSet: Date.now(),\n hashedVariables,\n isCustomTime,\n mutex: RunQueryPromiseMutex(),\n status: RemoteDataState.Loading,\n }\n return this.cache[queryID]\n }\n\n resetCacheByID = (id: string): void => {\n if (!this.cache[id]) {\n return\n }\n delete this.cache[id]\n }\n\n resetCache = (): void => {\n this.cache = {}\n }\n\n setCacheByID = (\n queryID: string,\n hashedVariables: string,\n values: RunQueryResult\n ): void => {\n const cacheResults = {\n ...this.initializeCacheByID(queryID, hashedVariables),\n dateSet: Date.now(),\n status: RemoteDataState.Done,\n values: null,\n }\n if (values.type === 'SUCCESS') {\n cacheResults.values = values\n this.cache[queryID] = cacheResults\n return\n }\n cacheResults.error = values.message\n cacheResults.status = RemoteDataState.Error\n this.cache[queryID] = cacheResults\n }\n\n startWatchDog = () => {\n setInterval(() => {\n this.cleanExpiredQueries()\n }, TIME_INVALIDATION / 2)\n\n this.cleanExpiredQueries()\n }\n}\n\nconst queryCache = new QueryCache()\n// Set an interval to check for expired data to invalidate\nqueryCache.startWatchDog()\n\nexport const resetQueryCache = (): void => {\n queryCache.resetCache()\n}\n\nexport const resetQueryCacheByQuery = (\n query: string,\n allVars: Variable[]\n): void => {\n const {queryID, hashedVariables} = calculateHashedVariables(allVars, query)\n\n if (queryCache.getFromCache(queryID, hashedVariables)) {\n queryCache.resetCacheByID(queryID)\n }\n}\n\nconst calculateHashedVariables = (\n allVars: Variable[],\n query: string\n): {queryID: string; variables: Variable[]; hashedVariables: string} => {\n const queryID = `${hashCode(query)}`\n const usedVars = filterUnusedVarsBasedOnQuery(allVars, [query])\n const variables = sortBy(usedVars, ['name'])\n\n const simplifiedVariables = variables.map(vari =>\n asSimplyKeyValueVariables(vari)\n )\n const stringifiedVars = JSON.stringify(simplifiedVariables)\n // create the queryID based on the query & vars\n const hashedVariables = `${hashCode(stringifiedVars)}`\n\n return {queryID, variables, hashedVariables}\n}\n\nconst hasWindowVars = (variables: VariableAssignment[]): boolean =>\n variables.some(vari => vari.id.name === WINDOW_PERIOD)\n\nexport const getCachedResultsOrRunQuery = (\n orgID: string,\n query: string,\n allVars: Variable[]\n): CancelBox => {\n const {queryID, variables, hashedVariables} = calculateHashedVariables(\n allVars,\n query\n )\n\n const cacheResults: RunQueryResult | null = queryCache.getFromCache(\n queryID,\n hashedVariables\n )\n\n // check the cache based on text & vars\n if (cacheResults) {\n return {\n promise: new Promise(resolve => resolve(cacheResults)),\n cancel: () => {},\n }\n }\n const variableAssignments = variables\n .map(v => asAssignment(v))\n .filter(v => !!v)\n\n let windowVars = []\n\n if (hasWindowVars(variableAssignments) === false) {\n windowVars = getWindowVarsFromVariables(query, variables)\n }\n\n // otherwise query & set results\n const extern = buildUsedVarsOption(query, variables, windowVars)\n const {mutex} = queryCache.initializeCacheByID(queryID, hashedVariables)\n const results = mutex.run(orgID, query, extern)\n results.promise = results.promise\n .then((res: RunQuerySuccessResult) => {\n // TODO(ariel): handle custom time range\n // if the timeRange is non-relative (i.e. a custom timeRange or the query text has a set time range)\n // we will need to pass an additional parameter to ensure that the cached data is treated differently\n // set the resolved promise results in the cache\n queryCache.setCacheByID(queryID, hashedVariables, res)\n // non-variable start / stop should\n return res\n })\n .catch((error: RunQueryErrorResult | RunQueryLimitResult) => {\n queryCache.setCacheByID(queryID, hashedVariables, error)\n return error\n })\n\n return results as CancelBox\n}\n\nexport const getCachedResultsThunk =\n (orgID: string, query: string) =>\n (_, getState: GetState): CancelBox =>\n getCachedResultsOrRunQuery(orgID, query, getAllVariables(getState()))\n","// Constants\nimport {OPTION_NAME} from 'src/variables/constants'\n\n// Types\nimport {File, Property, VariableAssignment, Variable} from 'src/types'\n\n// Utils\nimport {filterUnusedVarsBasedOnQuery} from 'src/shared/utils/filterUnusedVars'\n\n// Selectors\nimport {asAssignment} from 'src/variables/selectors'\n\nexport const buildUsedVarsOption = (\n query: string | string[],\n allVariables: Variable[],\n windowVars?: VariableAssignment[]\n): File => {\n const filteredVars = filterUnusedVarsBasedOnQuery(\n allVariables,\n Array.isArray(query) ? query : [query]\n )\n\n const filteredAssignmentVars = filteredVars\n .map(v => asAssignment(v))\n .filter(v => !!v)\n\n windowVars = windowVars ?? []\n return buildVarsOption([...filteredAssignmentVars, ...(windowVars ?? [])])\n}\n\nexport const buildVarsOption = (variables: VariableAssignment[]): File => ({\n type: 'File',\n package: null,\n imports: null,\n body: [\n {\n type: 'OptionStatement',\n assignment: {\n type: 'VariableAssignment',\n id: {\n type: 'Identifier',\n name: OPTION_NAME,\n },\n init: {\n type: 'ObjectExpression',\n properties: variables.filter(v => !!v).map(assignmentToProperty),\n },\n },\n },\n ],\n})\n\nconst assignmentToProperty = (variable: VariableAssignment): Property => {\n return {\n type: 'Property',\n key: variable.id,\n value: variable.init,\n }\n}\n","import {\n AppState,\n TimeZone,\n Theme,\n NavBarState,\n VersionInfo,\n FlowsCTA,\n FluxFunction,\n} from 'src/types'\n\nexport const timeZone = (state: AppState): TimeZone =>\n state.app.persisted.timeZone || ('Local' as TimeZone)\n\nexport const theme = (state: AppState): Theme =>\n state.app.persisted.theme || ('dark' as Theme)\n\nexport const navbarMode = (state: AppState): NavBarState =>\n state.app.persisted.navBarState || ('collapsed' as NavBarState)\n\nexport const fluxQueryBuilder = (state: AppState): boolean =>\n state.app.persisted.fluxQueryBuilder || false\n\nexport const getVersionInfo = (state: AppState): VersionInfo =>\n state.app.persisted.versionInfo || ({} as VersionInfo)\n\nexport const getPresentationMode = (state: AppState): boolean =>\n state.app.ephemeral.inPresentationMode || false\n\nexport const getFlowsCTA = (state: AppState): FlowsCTA =>\n state.app.persisted.flowsCTA ||\n ({explorer: true, tasks: true, alerts: true} as FlowsCTA)\n\nexport const getAllFluxFunctions = (state: AppState): FluxFunction[] =>\n state.fluxDocs.fluxDocs\n\nexport const getSubscriptionsCertificateInterest = (state: AppState): boolean =>\n state.app.persisted.subscriptionsCertificateInterest || false\n","// Libraries\nimport React, {PureComponent, ChangeEvent} from 'react'\nimport ReactDatePicker from 'react-datepicker'\nimport {connect} from 'react-redux'\nimport {DateTime} from 'luxon'\n\n// Components\nimport {Input, Grid, Form} from '@influxdata/clockface'\n\n// Styles\nimport 'react-datepicker/dist/react-datepicker.css'\n\n// Types\nimport {Columns, ComponentSize, ComponentStatus} from '@influxdata/clockface'\nimport {TimeZone} from 'src/types'\n\n// Utils\nimport {createDateTimeFormatter} from 'src/utils/datetime/formatters'\nimport {getTimeZone} from 'src/dashboards/selectors'\n\n// Constants\nimport {\n DEFAULT_TIME_FORMAT,\n STRICT_ISO8061_TIME_FORMAT,\n} from 'src/utils/datetime/constants'\nimport {\n getLuxonFormatString,\n isValidStrictly,\n} from 'src/utils/datetime/validator'\nimport {isISODate} from 'src/shared/utils/dateTimeUtils'\n\ninterface Props {\n label: string\n dateTime: string\n timeZone: TimeZone\n maxDate?: string\n minDate?: string\n onSelectDate: (date: string) => void\n onInvalidInput: () => void\n}\n\ninterface State {\n inputValue: string\n inputFormat: string\n}\n\nconst isValidDatepickerFormat = (d: string): boolean => {\n return (\n isValidStrictly(d, 'YYYY-MM-DD HH:mm') ||\n isValidStrictly(d, 'YYYY-MM-DD HH:mm:ss') ||\n isValidStrictly(d, 'YYYY-MM-DD HH:mm:ss.sss') ||\n isValidStrictly(d, 'YYYY-MM-DD') ||\n isISODate(d)\n )\n}\n\nconst getFormat = (d: string): string => {\n if (isValidStrictly(d, 'YYYY-MM-DD')) {\n return 'YYYY-MM-DD'\n }\n if (isValidStrictly(d, 'YYYY-MM-DD HH:mm')) {\n return 'YYYY-MM-DD HH:mm'\n }\n if (isValidStrictly(d, 'YYYY-MM-DD HH:mm:ss')) {\n return 'YYYY-MM-DD HH:mm:ss'\n }\n if (isValidStrictly(d, 'YYYY-MM-DD HH:mm:ss.sss')) {\n return 'YYYY-MM-DD HH:mm:ss.sss'\n }\n if (isISODate(d)) {\n return STRICT_ISO8061_TIME_FORMAT\n }\n return null\n}\n\nclass DatePicker extends PureComponent {\n private inCurrentMonth: boolean = false\n state = {\n inputValue: null,\n inputFormat: DEFAULT_TIME_FORMAT,\n }\n\n public componentDidUpdate() {\n if (this.isInputValueInvalid) {\n this.props.onInvalidInput()\n }\n }\n\n public render() {\n const {dateTime, label, maxDate, minDate, timeZone} = this.props\n\n const date = new Date(dateTime)\n\n if (timeZone === 'UTC') {\n // (sahas): the react-datepicker forces the timezone to be the Local timezone.\n // so when our app in in UTC mode, to make the datepicker respect that timezone,\n // we have to manually manipulate the Local time and add the offset so that it displays the correct UTC time in the picker\n date.setMinutes(date.getMinutes() + date.getTimezoneOffset())\n }\n\n return (\n
\n \n \n \n \n \n
\n \n
\n
\n
\n
\n )\n }\n\n private get inputValue(): string {\n const {dateTime, timeZone} = this.props\n const {inputValue, inputFormat} = this.state\n\n if (this.isInputValueInvalid) {\n return inputValue\n }\n\n // just return the ISO format string as is, no need to use our date-time Formatter\n if (isISODate(dateTime) && inputFormat === STRICT_ISO8061_TIME_FORMAT) {\n return dateTime\n }\n\n if (inputFormat) {\n const formatter = createDateTimeFormatter(inputFormat, timeZone)\n return formatter.format(new Date(dateTime))\n }\n const formatter = createDateTimeFormatter(DEFAULT_TIME_FORMAT, timeZone)\n\n return formatter.format(new Date(dateTime))\n }\n\n private get isInputValueInvalid(): boolean {\n const {inputValue} = this.state\n if (inputValue === null) {\n return false\n }\n\n return !isValidDatepickerFormat(inputValue)\n }\n\n private get inputErrorMessage(): string | undefined {\n if (this.isInputValueInvalid) {\n return 'Format must be YYYY-MM-DD HH:mm:ss'\n }\n\n return '\\u00a0\\u00a0'\n }\n\n private get inputStatus(): ComponentStatus {\n if (this.isInputValueInvalid) {\n return ComponentStatus.Error\n }\n return ComponentStatus.Default\n }\n\n private dayClassName = (date: Date) => {\n const day = date.getDate()\n\n if (day === 1) {\n this.inCurrentMonth = !this.inCurrentMonth\n }\n\n if (this.inCurrentMonth) {\n return 'range-picker--day-in-month'\n }\n\n return 'range-picker--day'\n }\n\n private handleSelectDate = (date: Date): void => {\n const {onSelectDate, timeZone} = this.props\n\n if (timeZone === 'UTC') {\n // (sahas): the react-datepicker forces the timezone to be the Local timezone.\n // so when our app in in UTC mode, to make the datepicker respect that timezone,\n // we have to manually manipulate the Local time and add the offset so that it displays the correct UTC time in the picker\n // because the time now needs to be back to UTC, we subtract the offset added below in code, in the handleSelectDate\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset())\n }\n\n onSelectDate(date.toISOString())\n }\n\n private handleChangeInput = (e: ChangeEvent): void => {\n const {onSelectDate, timeZone} = this.props\n const value = e.target.value\n\n if (isValidDatepickerFormat(value)) {\n let inputDate\n if (isISODate(value)) {\n inputDate = new Date(DateTime.fromISO(value))\n } else {\n inputDate = new Date(\n DateTime.fromFormat(value, getLuxonFormatString(getFormat(value)))\n )\n }\n\n if (timeZone === 'UTC' && !isISODate(value)) {\n // (sahas): the react-datepicker forces the timezone to be the Local timezone.\n // so when our app in in UTC mode, to make the datepicker respect that timezone,\n // we have to manually manipulate the Local time and add the offset so that it displays the correct UTC time in the picker\n // because the time now needs to be back to UTC, we subtract the offset added below in code, in the handleSelectDate\n inputDate.setMinutes(\n inputDate.getMinutes() - inputDate.getTimezoneOffset()\n )\n }\n\n onSelectDate(inputDate.toISOString())\n this.setState({inputValue: value, inputFormat: getFormat(value)})\n return\n }\n\n this.setState({inputValue: value, inputFormat: null})\n }\n}\n\nconst mapStateToProps = state => ({\n timeZone: getTimeZone(state),\n})\n\nexport default connect(mapStateToProps)(DatePicker)\n","import {OverlayID} from 'src/overlays/reducers/overlays'\nimport {OverlayParams} from 'src/types'\n\nexport enum ActionTypes {\n ShowOverlay = 'SHOW_OVERLAY',\n DismissOverlay = 'DISMISS_OVERLAY',\n SetOverlayParams = 'SET_OVERLAY_PARAMS',\n}\n\nexport type Actions = ShowOverlay | DismissOverlay | SetOverlayParams\n\nexport interface ShowOverlay {\n type: ActionTypes.ShowOverlay\n payload: {\n overlayID: OverlayID\n overlayParams: OverlayParams\n onClose: () => void\n }\n}\n\nexport const showOverlay = (\n overlayID: OverlayID,\n overlayParams: OverlayParams,\n onClose: () => void\n): ShowOverlay => {\n return {\n type: ActionTypes.ShowOverlay,\n payload: {overlayID, overlayParams, onClose},\n }\n}\n\nexport interface DismissOverlay {\n type: ActionTypes.DismissOverlay\n}\n\nexport const dismissOverlay = (): DismissOverlay => {\n return {\n type: ActionTypes.DismissOverlay,\n }\n}\n\nexport interface SetOverlayParams {\n type: ActionTypes.SetOverlayParams\n payload: {\n overlayParams: OverlayParams\n }\n}\n\nexport const setOverlayParams = (\n overlayParams: OverlayParams\n): SetOverlayParams => {\n return {\n type: ActionTypes.SetOverlayParams,\n payload: {overlayParams},\n }\n}\n","// Libraries\nimport React, {SFC} from 'react'\n\nconst LogoCpu: SFC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default LogoCpu\n","// Libraries\nimport React, {SFC} from 'react'\n\nconst LogoDocker: SFC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default LogoDocker\n","// Libraries\nimport React, {SFC} from 'react'\n\nconst LogoKubernetes: SFC = () => {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default LogoKubernetes\n","// Libraries\nimport React, {SFC} from 'react'\n\nconst LogoNginx: SFC = () => {\n return (\n \n \n \n \n \n \n )\n}\n\nexport default LogoNginx\n","// Libraries\nimport React, {SFC} from 'react'\n\nconst LogoRedis: SFC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default LogoRedis\n","// Types\nimport {\n TelegrafPluginName,\n TelegrafPluginInfo,\n ConfigFieldType,\n BundleName,\n} from 'src/types'\nimport {\n LogoCpu,\n LogoDocker,\n LogoKubernetes,\n LogoNginx,\n LogoRedis,\n} from 'src/dataLoaders/graphics'\n\nexport const QUICKSTART_SCRAPER_TARGET_URL = `${window.location.origin}/metrics`\n\ninterface PluginBundles {\n [bundleName: string]: TelegrafPluginName[]\n}\n\nexport const pluginsByBundle: PluginBundles = {\n [BundleName.System]: [\n 'cpu',\n 'disk',\n 'diskio',\n 'system',\n 'mem',\n 'net',\n 'processes',\n 'swap',\n ],\n [BundleName.Docker]: ['docker'],\n [BundleName.Kubernetes]: ['kubernetes'],\n [BundleName.Nginx]: ['nginx'],\n [BundleName.Redis]: ['redis'],\n}\n\nexport const telegrafPluginsInfo: TelegrafPluginInfo = {\n cpu: {\n fields: null,\n defaults: {\n name: 'cpu',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n disk: {\n fields: null,\n defaults: {\n name: 'disk',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n diskio: {\n fields: null,\n defaults: {\n name: 'diskio',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n docker: {\n fields: {\n endpoint: {\n type: ConfigFieldType.String,\n isRequired: true,\n },\n },\n defaults: {\n name: 'docker',\n type: 'input',\n config: {endpoint: ''},\n },\n templateID: '0000000000000002',\n },\n file: {\n fields: {\n files: {\n type: ConfigFieldType.StringArray,\n isRequired: true,\n },\n },\n defaults: {\n name: 'file',\n type: 'input',\n config: {files: []},\n },\n },\n kernel: {\n fields: null,\n defaults: {\n name: 'kernel',\n type: 'input',\n },\n },\n kubernetes: {\n fields: {\n url: {\n type: ConfigFieldType.Uri,\n isRequired: true,\n },\n },\n defaults: {\n name: 'kubernetes',\n type: 'input',\n config: {url: ''},\n },\n templateID: '0000000000000005',\n },\n logparser: {\n fields: {files: {type: ConfigFieldType.StringArray, isRequired: true}},\n defaults: {\n name: 'logparser',\n type: 'input',\n config: {files: []},\n },\n },\n mem: {\n fields: null,\n defaults: {\n name: 'mem',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n net: {\n fields: null,\n defaults: {\n name: 'net',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n net_response: {\n fields: null,\n defaults: {\n name: 'net_response',\n type: 'input',\n },\n },\n nginx: {\n fields: {urls: {type: ConfigFieldType.UriArray, isRequired: true}},\n defaults: {\n name: 'nginx',\n type: 'input',\n },\n templateID: '0000000000000006',\n },\n ['processes']: {\n fields: null,\n defaults: {\n name: 'processes',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n procstat: {\n fields: {exe: {type: ConfigFieldType.String, isRequired: true}},\n defaults: {\n name: 'procstat',\n type: 'input',\n config: {exe: ''},\n },\n },\n prometheus: {\n fields: {urls: {type: ConfigFieldType.UriArray, isRequired: true}},\n defaults: {\n name: 'prometheus',\n type: 'input',\n config: {urls: []},\n },\n },\n redis: {\n fields: {\n servers: {type: ConfigFieldType.StringArray, isRequired: true},\n password: {type: ConfigFieldType.String, isRequired: false},\n },\n defaults: {\n name: 'redis',\n type: 'input',\n config: {servers: [], password: ''},\n },\n templateID: '0000000000000008',\n },\n syslog: {\n fields: {server: {type: ConfigFieldType.String, isRequired: true}},\n defaults: {\n name: 'syslog',\n type: 'input',\n config: {server: ''},\n },\n },\n swap: {\n fields: null,\n defaults: {\n name: 'swap',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n system: {\n fields: null,\n defaults: {\n name: 'system',\n type: 'input',\n },\n templateID: '0000000000000009',\n },\n tail: {\n fields: null,\n defaults: {\n name: 'tail',\n type: 'input',\n },\n },\n}\n\nexport const BUNDLE_LOGOS = {\n [BundleName.System]: LogoCpu,\n [BundleName.Docker]: LogoDocker,\n [BundleName.Kubernetes]: LogoKubernetes,\n [BundleName.Nginx]: LogoNginx,\n [BundleName.Redis]: LogoRedis,\n}\n\nexport const PLUGIN_BUNDLE_OPTIONS: BundleName[] = [\n BundleName.System,\n BundleName.Docker,\n BundleName.Kubernetes,\n BundleName.Nginx,\n BundleName.Redis,\n]\n","// Types\nimport {RemoteDataState, AuthEntities, Authorization} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nexport const SET_AUTH = 'SET_AUTH'\nexport const ADD_AUTH = 'ADD_AUTH'\nexport const EDIT_AUTH = 'EDIT_AUTH'\nexport const REMOVE_AUTH = 'REMOVE_AUTH'\nexport const SET_CURRENT_AUTH = 'SET_CURRENT_AUTH'\nexport const SET_ALL_RESOURCES = 'SET_ALL_RESOURCES'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const setAuthorizations = (\n status: RemoteDataState,\n schema?: NormalizedSchema\n) =>\n ({\n type: SET_AUTH,\n status,\n schema,\n } as const)\n\nexport const addAuthorization = (\n schema: NormalizedSchema\n) =>\n ({\n type: ADD_AUTH,\n schema,\n } as const)\n\nexport const editAuthorization = (\n schema: NormalizedSchema\n) =>\n ({\n type: EDIT_AUTH,\n schema,\n } as const)\n\nexport const removeAuthorization = (id: string) =>\n ({\n type: REMOVE_AUTH,\n id,\n } as const)\n\nexport const setCurrentAuthorization = (\n status: RemoteDataState,\n item?: Authorization\n) =>\n ({\n type: SET_CURRENT_AUTH,\n status,\n item,\n } as const)\n\nexport const setAllResources = (list?: string[]) =>\n ({\n type: SET_ALL_RESOURCES,\n list,\n } as const)\n","import {Authorization} from 'src/types'\nimport {postAuthorization} from 'src/client'\nimport {getAuthConnection} from 'src/client/unityRoutes'\nimport {getOauthClientConfig} from 'src/client/cloudPrivRoutes'\nimport {OAuthClientConfig} from 'src/client/cloudPrivRoutes'\n\nexport const createAuthorization = async (\n authorization\n): Promise => {\n try {\n const resp = await postAuthorization({\n data: authorization,\n })\n\n if (resp.status !== 201) {\n throw new Error(resp.data.message)\n }\n\n return resp.data\n } catch (error) {\n console.error(error)\n throw error\n }\n}\n\nexport const getAuth0Config = async (\n redirectTo?: string\n): Promise => {\n try {\n let payload = {}\n if (redirectTo) {\n payload = {\n query: {\n redirectTo,\n },\n }\n }\n const resp = await getOauthClientConfig(payload)\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n return resp.data\n } catch (error) {\n console.error(error)\n throw error\n }\n}\n\nexport const getConnection = async (email: string): Promise => {\n const response = await getAuthConnection({\n query: {email: encodeURIComponent(email)},\n })\n\n if (response.status >= 500) {\n throw new Error(response.data)\n }\n\n if (response.status === 200) {\n return response.data\n }\n}\n","// Labels can use a different set of brand colors than single stats or gauges\nimport {Label, RemoteDataState} from 'src/types'\nimport {LabelColor, LabelColorType} from 'src/types/colors'\n\nexport const INFLUX_LABEL_PREFIX = '@influxdata'\nexport const TOKEN_LABEL = `${INFLUX_LABEL_PREFIX}.token`\n\nexport const HEX_CODE_CHAR_LENGTH = 7\n\nexport const DEFAULT_LABEL_COLOR_HEX = '#326BBA'\n\nexport const EMPTY_LABEL: Label = {\n name: '',\n status: RemoteDataState.Done,\n properties: {\n description: '',\n color: DEFAULT_LABEL_COLOR_HEX,\n },\n}\n\nexport const CUSTOM_LABEL: LabelColor = {\n id: 'custom',\n colorHex: '#RRRRRR',\n name: 'Custom Hexcode',\n type: LabelColorType.Custom,\n}\n\nexport const PRESET_LABEL_COLORS: LabelColor[] = [\n CUSTOM_LABEL,\n {\n id: 'label-preset-sapphire',\n colorHex: '#326BBA',\n name: 'Sapphire',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-ocean',\n colorHex: '#4591ED',\n name: 'Ocean',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-pool',\n colorHex: '#22ADF6',\n name: 'Pool',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-laser',\n colorHex: '#00C9FF',\n name: 'Laser',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-hydrogen',\n colorHex: '#6BDFFF',\n name: 'Hydrogen',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-neutrino',\n colorHex: '#BEF0FF',\n name: 'Neutrino',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-void',\n colorHex: '#311F94',\n name: 'Void',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-amethyst',\n colorHex: '#513CC6',\n name: 'Amethyst',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-star',\n colorHex: '#7A65F2',\n name: 'Star',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-comet',\n colorHex: '#9394FF',\n name: 'Comet',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-potassium',\n colorHex: '#B1B6FF',\n name: 'Potassium',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-moonstone',\n colorHex: '#C9D0FF',\n name: 'Moonstone',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-emerald',\n colorHex: '#108174',\n name: 'Emerald',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-viridian',\n colorHex: '#32B08C',\n name: 'Viridian',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-rainforest',\n colorHex: '#4ED8A0',\n name: 'Rainforest',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-honeydew',\n colorHex: '#7CE490',\n name: 'Honeydew',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-krypton',\n colorHex: '#A5F3B4',\n name: 'Krypton',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-wasabi',\n colorHex: '#C6FFD0',\n name: 'Wasabi',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-ruby',\n colorHex: '#BF3D5E',\n name: 'Ruby',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-fire',\n colorHex: '#DC4E58',\n name: 'Fire',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-curacao',\n colorHex: '#F95F53',\n name: 'Curacao',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-dreamsicle',\n colorHex: '#FF8564',\n name: 'Dreamsicle',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-tungsten',\n colorHex: '#FFB6A0',\n name: 'Tungsten',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-marmelade',\n colorHex: '#FFDCCF',\n name: 'Marmelade',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-topaz',\n colorHex: '#E85B1C',\n name: 'Topaz',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-tiger',\n colorHex: '#F48D38',\n name: 'Tiger',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-pineapple',\n colorHex: '#FFB94A',\n name: 'Pineapple',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-thunder',\n colorHex: '#FFD255',\n name: 'Thunder',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-sulfur',\n colorHex: '#FFE480',\n name: 'Sulfur',\n type: LabelColorType.Preset,\n },\n {\n id: 'label-preset-daisy',\n colorHex: '#FFF6B8',\n name: 'Daisy',\n type: LabelColorType.Preset,\n },\n]\n\nexport const INPUT_ERROR_COLOR = '#0F0E15'\n\nexport const LABEL_NAME_MAX_LENGTH = 30\n","// Libraries\nimport {NumericColumnData} from '@influxdata/giraffe'\n\n// APIs\nimport {parse} from 'src/languageSupport/languages/flux/parser'\n\n// Utils\nimport {getMinDurationFromAST} from 'src/shared/utils/getMinDurationFromAST'\nimport {\n buildUsedVarsOption,\n buildVarsOption,\n} from 'src/variables/utils/buildVarsOption'\n\n// Constants\nimport {\n TIME_RANGE_START,\n TIME_RANGE_STOP,\n WINDOW_PERIOD,\n} from 'src/variables/constants'\n\n// Types\nimport {VariableAssignment, Package} from 'src/types/ast'\nimport {DurationLiteral, RemoteDataState, TimeRange, Variable} from 'src/types'\nimport {SELECTABLE_TIME_RANGES} from 'src/shared/constants/timeRanges'\n\nconst DESIRED_POINTS_PER_GRAPH = 360\nconst MINIMUM_WINDOW_PERIOD = 1\nexport const FALLBACK_WINDOW_PERIOD = 15000\n\n/*\n Compute the `v.windowPeriod` variable assignment for a query.\n*/\nexport const getWindowVarsFromVariables = (\n query: string,\n variables: Variable[]\n): VariableAssignment[] => {\n if (!query.includes(WINDOW_PERIOD)) {\n return []\n }\n\n const windowPeriod =\n getWindowPeriodFromVariables(query, variables) || FALLBACK_WINDOW_PERIOD\n\n return [\n {\n type: 'VariableAssignment',\n id: {\n type: 'Identifier',\n name: WINDOW_PERIOD,\n },\n init: {\n type: 'DurationLiteral',\n values: [{magnitude: windowPeriod, unit: 'ms'}],\n },\n },\n ]\n}\n\nexport const getWindowVars = (\n query: string,\n variables: VariableAssignment[]\n): VariableAssignment[] => {\n if (!query.includes(WINDOW_PERIOD)) {\n return []\n }\n\n const windowPeriod =\n getWindowPeriod(query, variables) || FALLBACK_WINDOW_PERIOD\n\n return [\n {\n type: 'VariableAssignment',\n id: {\n type: 'Identifier',\n name: WINDOW_PERIOD,\n },\n init: {\n type: 'DurationLiteral',\n values: [{magnitude: windowPeriod, unit: 'ms'}],\n },\n },\n ]\n}\n\nexport const calcWindowPeriodForDuration = (queryDuration: number) =>\n Math.round(queryDuration / DESIRED_POINTS_PER_GRAPH) // queryDuration in ms\n\n/*\n Compute the duration (in milliseconds) to use for the `v.windowPeriod`\n variable assignment for a query.\n*/\nexport const getWindowPeriod = (\n query: string,\n variables: VariableAssignment[]\n): number | null => {\n if (query.length === 0) {\n return null\n }\n try {\n const ast = parse(query)\n const substitutedAST: Package = {\n package: '',\n type: 'Package',\n files: [ast, buildVarsOption(variables)],\n }\n\n const queryDuration = getMinDurationFromAST(substitutedAST) // in ms\n\n const foundDuration = SELECTABLE_TIME_RANGES.find(\n tr => tr.seconds * 1000 === queryDuration\n )\n\n if (foundDuration) {\n return foundDuration.windowPeriod\n }\n\n return calcWindowPeriodForDuration(queryDuration)\n } catch (error) {\n return null\n }\n}\n\nexport const getWindowPeriodFromVariables = (\n query: string,\n variables: Variable[]\n): number | null => {\n if (query.length === 0) {\n return null\n }\n try {\n const ast = parse(query)\n const substitutedAST: Package = {\n package: '',\n type: 'Package',\n files: [ast, buildUsedVarsOption(query, variables)],\n }\n\n const queryDuration = getMinDurationFromAST(substitutedAST) // in ms\n\n const foundDuration = SELECTABLE_TIME_RANGES.find(\n tr => tr.seconds * 1000 === queryDuration\n )\n\n if (foundDuration) {\n return foundDuration.windowPeriod\n }\n\n return calcWindowPeriodForDuration(queryDuration)\n } catch (error) {\n return null\n }\n}\n\nexport const getWindowPeriodVariable = (\n query: string,\n variables: VariableAssignment[]\n): Variable[] | null => {\n const total = getWindowPeriod(query, variables)\n\n if (total === null || total === Infinity) {\n return null\n }\n\n const windowPeriodVariable: Variable = {\n orgID: '',\n id: WINDOW_PERIOD,\n name: WINDOW_PERIOD,\n arguments: {\n type: 'system',\n values: [total],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n\n return [windowPeriodVariable]\n}\nexport const getWindowPeriodVariableFromVariables = (\n query: string,\n variables: Variable[]\n): Variable[] | null => {\n const total = getWindowPeriodFromVariables(query, variables)\n\n if (total === null || total === Infinity) {\n return null\n }\n\n const windowPeriodVariable: Variable = {\n orgID: '',\n id: WINDOW_PERIOD,\n name: WINDOW_PERIOD,\n arguments: {\n type: 'system',\n values: [total],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n\n return [windowPeriodVariable]\n}\n\nexport const getVariableForZoomRequery = (\n variableID: string,\n domain: number[],\n timeRangeType: string\n): Variable => {\n const variable: Variable = {\n orgID: '',\n id: variableID,\n name: variableID,\n arguments: {\n type: 'system',\n },\n status: RemoteDataState.Done,\n labels: [],\n selected: [],\n }\n\n const startTime = new Date(domain?.[0] ?? '')\n const stopTime = new Date(domain?.[1] ?? '')\n switch (variableID) {\n case TIME_RANGE_START:\n if (timeRangeType === 'custom') {\n variable.arguments.values = [startTime.toISOString()]\n } else {\n variable.arguments.values = [\n [\n {\n magnitude: Date.now() - startTime.getTime(),\n unit: 'ms',\n },\n ],\n ]\n }\n return variable\n\n case TIME_RANGE_STOP:\n variable.arguments.values = [stopTime.toISOString()]\n return variable\n\n default:\n return variable\n }\n}\n\n/*\n * Prevents the windowPeriod from being null for the time axis\n * this fallback is used only for the zoom re-query feature\n * if the windowPeriod cannot be found, apply the user-selected domain\n * to the original data set and divide by the optimal number of graph points\n * to get the estimated windowPeriod\n */\nexport const normalizeWindowPeriodForZoomRequery = (\n windowPeriod: number | null,\n timeRange: TimeRange,\n domain: Array,\n column: NumericColumnData | string[]\n): number => {\n if (\n !timeRange ||\n !column ||\n (windowPeriod && Math.abs(windowPeriod) !== Infinity)\n ) {\n if (windowPeriod < 0) {\n return FALLBACK_WINDOW_PERIOD\n }\n return windowPeriod\n }\n\n if (\n column.length === 0 ||\n domain.length !== 2 ||\n Number.isNaN(domain[0]) ||\n Number.isNaN(domain[1])\n ) {\n return FALLBACK_WINDOW_PERIOD\n }\n\n let counter = 0\n let startIndex = counter\n let endIndex = counter\n let isSorted = true\n let prevValue = column[counter]\n\n while (counter < column.length) {\n if (domain[0] > column[counter]) {\n startIndex = counter\n }\n if (domain[1] > column[counter]) {\n endIndex = counter\n }\n if (prevValue > column[counter] || column[counter] !== column[counter]) {\n counter = column.length\n isSorted = false\n } else {\n prevValue = column[counter]\n counter += 1\n }\n }\n\n const duration =\n (Number(column[endIndex]) - Number(column[startIndex])) /\n DESIRED_POINTS_PER_GRAPH\n\n if (duration === Infinity || Number.isNaN(duration) || isSorted === false) {\n return FALLBACK_WINDOW_PERIOD\n }\n\n return Math.max(duration, MINIMUM_WINDOW_PERIOD)\n}\n\n/*\n * Prevents the windowPeriod assignment from being empty\n * this fallback is used only for the zoom re-query feature\n * re-querying should include the windowPeriod assignment as a literal\n * even if the backend ignores it due to an override in the Flux script\n */\nexport const normalizeWindowPeriodVariableForZoomRequery = (\n variableAssignment: VariableAssignment[],\n windowPeriod: number\n): VariableAssignment[] => {\n const assignedWindowPeriod = Math.max(\n Math.min(Math.round(windowPeriod), FALLBACK_WINDOW_PERIOD),\n MINIMUM_WINDOW_PERIOD\n )\n\n const init = (\n variableAssignment?.[0]?.init\n ? variableAssignment?.[0]?.init\n : {\n values: [{magnitude: assignedWindowPeriod, unit: 'ms'}],\n type: 'DurationLiteral',\n }\n ) as DurationLiteral\n\n const magnitude = init?.values?.[0]?.magnitude\n if (magnitude && Math.abs(magnitude) !== Infinity) {\n return variableAssignment\n }\n\n return [\n {\n type: 'VariableAssignment',\n id: {\n type: 'Identifier',\n name: WINDOW_PERIOD,\n },\n init: {\n type: 'DurationLiteral',\n values: [{magnitude: assignedWindowPeriod, unit: 'ms'}],\n },\n },\n ]\n}\n","// Libraries\nimport React, {\n FC,\n createContext,\n useEffect,\n useMemo,\n useRef,\n useContext,\n} from 'react'\nimport {useDispatch} from 'react-redux'\nimport {createLocalStorageStateHook} from 'use-local-storage-state'\nimport {normalize} from 'normalizr'\n\nimport {arrayOfBuckets} from 'src/schemas'\nimport {notify} from 'src/shared/actions/notifications'\nimport {setBuckets} from 'src/buckets/actions/creators'\n\n// Contexts\nimport {CLOUD} from 'src/shared/constants'\nimport {\n measurementSchemaAdditionSuccessful,\n measurementSchemaAdditionFailed,\n} from 'src/shared/copy/notifications'\n\n// Types\nimport {Bucket, BucketEntities, RemoteDataState} from 'src/types'\nimport {QueryScope} from 'src/shared/contexts/query'\nimport {PipeContext} from 'src/flows/context/pipe'\n\nlet MeasurementSchemaCreateRequest = null\nif (CLOUD) {\n MeasurementSchemaCreateRequest =\n require('src/client/generatedRoutes').MeasurementSchemaCreateRequest\n}\n\nexport interface ExtendedBucket extends Bucket {\n schemas: typeof MeasurementSchemaCreateRequest[]\n}\n\ninterface BucketContextType {\n loading: RemoteDataState\n buckets: Bucket[]\n addBucket: (_: Bucket) => void\n createBucket: (_: Bucket) => void\n refresh: () => void\n}\n\nconst DEFAULT_CONTEXT: BucketContextType = {\n loading: RemoteDataState.NotStarted,\n buckets: [],\n addBucket: (_: Bucket) => {},\n createBucket: (_: Bucket) => {},\n refresh: () => {},\n}\n\nexport const BucketContext = createContext(DEFAULT_CONTEXT)\n\nconst useLocalStorageState = createLocalStorageStateHook('buckets', {})\n\ninterface Props {\n omitSampleData?: boolean\n scope: QueryScope\n}\n\nexport const BucketProvider: FC = ({\n children,\n omitSampleData = false,\n scope,\n}) => {\n const cacheKey = `${scope.region};;<${scope.org}>`\n const [bucketCache, setBucketCache] = useLocalStorageState()\n const {data} = useContext(PipeContext)\n const dispatch = useDispatch()\n const buckets = bucketCache[cacheKey]?.buckets ?? []\n const lastFetch = bucketCache[cacheKey]?.lastFetch ?? 0\n const loading = bucketCache[cacheKey]?.loading ?? RemoteDataState.NotStarted\n const controller = useRef(null)\n\n useEffect(() => {\n if (controller.current) {\n return () => {\n try {\n // Cancelling active query so that there's no memory leak in this component when unmounting\n controller.current.abort()\n } catch (e) {\n // Do nothing\n }\n }\n }\n }, [controller])\n\n // keep the redux store in sync\n useEffect(() => {\n if (loading === RemoteDataState.Done) {\n dispatch(\n setBuckets(\n RemoteDataState.Done,\n normalize(\n buckets.filter(b => b.type !== 'sample'),\n arrayOfBuckets\n )\n )\n )\n }\n }, [buckets, dispatch, loading])\n\n // TODO: load bucket creation limits on org change\n // expose limits to frontend\n\n const updateCache = (update: any): void => {\n bucketCache[cacheKey] = {\n ...bucketCache[cacheKey],\n ...update,\n }\n setBucketCache({\n ...bucketCache,\n })\n }\n\n const fetchBuckets = () => {\n if (controller.current) {\n controller.current.abort()\n controller.current = null\n } else {\n controller.current = new AbortController()\n }\n\n updateCache({\n loading: RemoteDataState.Loading,\n })\n\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept-Encoding': 'gzip',\n }\n\n if (scope?.token) {\n headers['Authorization'] = `Token ${scope.token}`\n }\n\n fetch(\n `${scope?.region}/api/v2/buckets?limit=${CLOUD ? -1 : 100}&orgID=${\n scope?.org\n }`,\n {\n method: 'GET',\n headers,\n signal: controller.current.signal,\n }\n )\n .then(response => {\n return response.json()\n })\n .then(response => {\n controller.current = null\n const base: any = {\n system: [],\n user: [],\n }\n\n const bucks = response.buckets.reduce((acc, curr) => {\n if (curr.type === 'system') {\n acc.system.push(curr)\n } else {\n acc.user.push(curr)\n }\n return acc\n }, base)\n\n bucks.system.sort((a, b) =>\n `${a.name}`.toLowerCase().localeCompare(`${b.name}`.toLowerCase())\n )\n bucks.user.sort((a, b) =>\n `${a.name}`.toLowerCase().localeCompare(`${b.name}`.toLowerCase())\n )\n updateCache({\n loading: RemoteDataState.Done,\n lastFetch: Date.now(),\n buckets: [...bucks.user, ...bucks.system],\n })\n })\n .catch(error => {\n console.error({error})\n controller.current = null\n updateCache({\n loading: RemoteDataState.Error,\n })\n })\n }\n\n // make sure to fetch buckets on mount\n useEffect(() => {\n if (Date.now() - lastFetch > 12 * 60 * 60 * 1000) {\n fetchBuckets()\n } else if (loading === RemoteDataState.NotStarted) {\n fetchBuckets()\n }\n }, [])\n\n const createBucket = (bucket: ExtendedBucket) => {\n bucket.orgID = scope.org\n let schemas = []\n if (bucket.schemas && bucket.schemas.length) {\n bucket.schemaType = 'explicit'\n schemas = bucket.schemas\n } else {\n bucket.schemaType = 'implicit'\n }\n\n delete bucket.schemas\n\n const headers = {\n 'Content-Type': 'application/json',\n 'Accept-Encoding': 'gzip',\n }\n\n if (scope?.token) {\n headers['Authorization'] = `Token ${scope.token}`\n }\n\n fetch(`${scope?.region}/api/v2/buckets`, {\n method: 'POST',\n headers,\n body: JSON.stringify(bucket),\n })\n .then(response => {\n return response.json()\n })\n .then(response => {\n addBucket(response)\n\n return Promise.all(\n schemas.map(schema =>\n fetch(\n `${scope?.region}/api/v2/buckets/${response.id}/schema/measurements`,\n {\n method: 'POST',\n headers,\n body: JSON.stringify(schema),\n }\n ).then(resp => {\n if (resp.status !== 201) {\n dispatch(\n notify(\n measurementSchemaAdditionFailed(response.name, schema.name)\n )\n )\n } else {\n dispatch(\n notify(\n measurementSchemaAdditionSuccessful(\n response.name,\n schema.name\n )\n )\n )\n }\n })\n )\n )\n })\n }\n\n const addBucket = (bucket: Bucket) => {\n const bucks = buckets.reduce(\n (acc, curr) => {\n if (!acc[curr.type]) {\n acc[curr.type] = []\n }\n acc[curr.type].push(curr)\n return acc\n },\n {[bucket.type]: [bucket]}\n )\n\n bucks.system.sort((a, b) =>\n `${a.name}`.toLowerCase().localeCompare(`${b.name}`.toLowerCase())\n )\n bucks.user.sort((a, b) =>\n `${a.name}`.toLowerCase().localeCompare(`${b.name}`.toLowerCase())\n )\n\n updateCache({\n buckets: [...bucks.user, ...bucks.system],\n })\n }\n\n const refresh = () => {\n fetchBuckets()\n }\n const outBuckets = useMemo(\n () =>\n buckets\n .filter(b => b.type !== 'sample')\n .concat(\n omitSampleData\n ? []\n : [\n {\n type: 'sample',\n name: 'Air Sensor Data',\n id: 'airSensor',\n },\n {\n type: 'sample',\n name: 'Coinbase bitcoin price',\n id: 'bitcoin',\n },\n {\n type: 'sample',\n name: 'NOAA National Buoy Data',\n id: 'noaa',\n },\n {\n type: 'sample',\n name: 'USGS Earthquakes',\n id: 'usgs',\n },\n ]\n ),\n [buckets]\n )\n\n return useMemo(\n () => (\n \n {children}\n \n ),\n [data.bucket, loading, outBuckets]\n )\n}\n","// Types\nimport {AppState, AnnotationStream} from 'src/types'\nimport {sortBy} from 'lodash'\n\nexport const getVisibleAnnotationStreams = (state: AppState): string[] => {\n const visibleStreams = state.annotations.visibleStreamsByID\n\n return sortBy(visibleStreams, stream => stream)\n}\n\nexport const getHiddenAnnotationStreams = (state: AppState): string[] => {\n const visibleStreams = state.annotations.visibleStreamsByID\n const filtered = state.annotations.streams\n .filter(stream => !visibleStreams.includes(stream.stream))\n .map(stream => stream.stream)\n\n return sortBy(filtered, stream => stream)\n}\n\nexport const getAnnotationStreams = (state: AppState): AnnotationStream[] => {\n return state.annotations.streams\n}\n\nexport const isAnnotationsModeEnabled = (state: AppState): boolean => {\n return state.annotations.enableAnnotationsMode\n}\n","import React, {FC, useCallback, useState} from 'react'\nimport {useSelector, useDispatch} from 'react-redux'\nimport {updateThresholds} from 'src/alerting/actions/alertBuilder'\nimport {getByID} from 'src/resources/selectors'\n\nimport {\n AppState,\n Check,\n CheckType,\n DashboardQuery,\n ResourceType,\n StatusRow,\n Threshold,\n} from 'src/types'\n\nexport interface CheckContextType {\n id: string\n type: CheckType\n query: DashboardQuery\n\n statuses: StatusRow[][]\n thresholds: Threshold[]\n\n updateStatuses: (statuses: StatusRow[][]) => void\n updateThresholds: (thresholds: Threshold[]) => void\n}\n\nexport const CheckContext = React.createContext({\n id: '',\n type: 'custom',\n query: null,\n\n statuses: [],\n thresholds: [],\n\n updateStatuses: () => {},\n updateThresholds: () => {},\n})\n\ninterface ProviderProps {\n id: string\n}\n\nexport const AlertProvider: FC = ({children}) => {\n const {type, thresholds} = useSelector((state: AppState) => {\n return state.alertBuilder\n })\n const [statuses, setStatuses] = useState([])\n\n return (\n {},\n }}\n >\n {children}\n \n )\n}\n\nconst CheckProvider: FC = ({id, children}) => {\n const dispatch = useDispatch()\n const check = useSelector((state: AppState) => {\n return getByID(state, ResourceType.Checks, id)\n })\n const [statuses, setStatuses] = useState([])\n\n const update = useCallback(\n (thresholds: Threshold[]) => {\n dispatch(updateThresholds(thresholds))\n },\n [dispatch]\n )\n\n return (\n \n {children}\n \n )\n}\n\nexport default CheckProvider\n","// Types\nimport {\n RemoteDataState,\n DashboardEntities,\n DashboardSortParams,\n} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\nimport {setLabelOnResource} from 'src/labels/actions/creators'\n\nexport const ADD_DASHBOARD_LABEL = 'ADD_DASHBOARD_LABEL'\nexport const DELETE_DASHBOARD_FAILED = 'DELETE_DASHBOARD_FAILED'\nexport const EDIT_DASHBOARD = 'EDIT_DASHBOARD'\nexport const REMOVE_DASHBOARD = 'REMOVE_DASHBOARD'\nexport const REMOVE_DASHBOARD_LABEL = 'REMOVE_DASHBOARD_LABEL'\nexport const SET_DASHBOARD = 'SET_DASHBOARD'\nexport const SET_DASHBOARDS = 'SET_DASHBOARDS'\nexport const SET_DASHBOARD_SORT = 'SET_DASHBOARD_SORT'\nexport const SET_DASHBOARDS_SEARCH_TERM = 'SET_DASHBOARDS_SEARCH_TERM'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// R is the type of the value of the \"result\" key in normalizr's normalization\ntype DashboardSchema = NormalizedSchema<\n DashboardEntities,\n R\n>\n\n// Action Creators\nexport const editDashboard = (schema: DashboardSchema) =>\n ({\n type: EDIT_DASHBOARD,\n schema,\n } as const)\n\nexport const setDashboards = (\n status: RemoteDataState,\n schema?: DashboardSchema\n) =>\n ({\n type: SET_DASHBOARDS,\n status,\n schema,\n } as const)\n\nexport const setDashboardSort = (sortOptions: DashboardSortParams) =>\n ({\n type: SET_DASHBOARD_SORT,\n sortOptions,\n } as const)\n\nexport const setDashboard = (\n id: string,\n status: RemoteDataState,\n schema?: DashboardSchema\n) =>\n ({\n type: SET_DASHBOARD,\n id,\n status,\n schema,\n } as const)\n\nexport const removeDashboard = (id: string) =>\n ({\n type: REMOVE_DASHBOARD,\n id,\n } as const)\n\nexport const removeDashboardLabel = (dashboardID: string, labelID: string) =>\n ({\n type: REMOVE_DASHBOARD_LABEL,\n dashboardID,\n labelID,\n } as const)\n\nexport const setSearchTerm = (searchTerm: string) =>\n ({\n type: SET_DASHBOARDS_SEARCH_TERM,\n searchTerm,\n } as const)\n","// Types\nimport {AppState} from 'src/types'\nimport {RemoteDataState} from '@influxdata/clockface'\n\nexport const selectQuartzIdentity = (state: AppState): AppState['identity'] => {\n return state.identity\n}\n\nexport const selectQuartzIdentityStatus = (state: AppState): RemoteDataState =>\n state.identity.currentIdentity.status\n\nexport const selectQuartzOrgs = (\n state: AppState\n): AppState['identity']['quartzOrganizations'] => {\n return state.identity.quartzOrganizations\n}\n","import {ComponentStatus} from 'src/clockface'\nimport {RemoteDataState} from 'src/types'\n\nexport const toComponentStatus = (status: RemoteDataState): ComponentStatus => {\n if (status === RemoteDataState.NotStarted) {\n return ComponentStatus.Disabled\n }\n\n if (status === RemoteDataState.Loading) {\n return ComponentStatus.Loading\n }\n\n if (status === RemoteDataState.Error) {\n return ComponentStatus.Error\n }\n\n return ComponentStatus.Default\n}\n","// Libraries\nimport React, {FC, ChangeEvent, CSSProperties, useState} from 'react'\n\n// Components\nimport {\n Input,\n Dropdown,\n ComponentStatus,\n ComponentSize,\n DropdownMenuTheme,\n ComponentColor,\n IconFont,\n} from '@influxdata/clockface'\n\ninterface Props {\n testID: string\n className?: string\n searchTerm?: string\n searchPlaceholder?: string\n selectedOption: string\n onSelect: (option: string) => void\n onChangeSearchTerm?: (value: string) => void\n buttonStatus: ComponentStatus\n buttonTestID: string\n menuTestID: string\n options: (string | number)[]\n emptyText: string\n style?: CSSProperties\n}\n\nconst SearchableDropdown: FC = ({\n buttonStatus = ComponentStatus.Default,\n testID = 'searchable-dropdown',\n buttonTestID = 'searchable-dropdown--button',\n menuTestID = 'searchable-dropdown--menu',\n searchTerm = '',\n searchPlaceholder,\n selectedOption,\n className,\n style,\n options,\n onChangeSearchTerm,\n emptyText,\n onSelect,\n}) => {\n const [isSearchActive, setIsSearchActive] = useState(false)\n\n const handleChange = (e: ChangeEvent): void => {\n onChangeSearchTerm(e.target.value)\n }\n\n const filteredOptions = options.filter(option =>\n `${option}`.toLocaleLowerCase().includes(searchTerm.toLocaleLowerCase())\n )\n\n let body: JSX.Element | JSX.Element[] = (\n {emptyText}\n )\n\n if (filteredOptions.length) {\n body = filteredOptions.map(option => (\n \n {option}\n \n ))\n }\n\n return (\n (\n \n {buttonStatus === ComponentStatus.Loading\n ? 'Loading...'\n : selectedOption}\n \n )}\n menu={onCollapse => (\n {\n if (isSearchActive === false) {\n onCollapse()\n }\n }}\n theme={DropdownMenuTheme.Onyx}\n testID={menuTestID}\n >\n
\n setIsSearchActive(true)}\n onChange={handleChange}\n onBlur={() => setIsSearchActive(false)}\n value={searchTerm}\n placeholder={searchPlaceholder}\n size={ComponentSize.Small}\n autoFocus={true}\n />\n
\n {body}\n \n )}\n />\n )\n}\n\nexport default SearchableDropdown\n","import {DEFAULT_TIME_FORMAT} from 'src/utils/datetime/constants'\n\nexport const FORMAT_OPTIONS: Array<{text: string}> = [\n {text: DEFAULT_TIME_FORMAT}, // 'YYYY-MM-DD HH:mm:ss'\n {text: 'YYYY-MM-DD hh:mm:ss a ZZ'},\n {text: 'DD/MM/YYYY HH:mm:ss.sss'},\n {text: 'DD/MM/YYYY hh:mm:ss.sss a'},\n {text: 'MM/DD/YYYY HH:mm:ss.sss'},\n {text: 'MM/DD/YYYY hh:mm:ss.sss a'},\n {text: 'YYYY/MM/DD HH:mm:ss'},\n {text: 'YYYY/MM/DD hh:mm:ss a'},\n {text: 'HH:mm'},\n {text: 'hh:mm a'},\n {text: 'HH:mm:ss'},\n {text: 'hh:mm:ss a'},\n {text: 'HH:mm:ss ZZ'},\n {text: 'hh:mm:ss a ZZ'},\n {text: 'HH:mm:ss.sss'},\n {text: 'hh:mm:ss.sss a'},\n {text: 'MMMM D, YYYY HH:mm:ss'},\n {text: 'MMMM D, YYYY hh:mm:ss a'},\n {text: 'dddd, MMMM D, YYYY HH:mm:ss'},\n {text: 'dddd, MMMM D, YYYY hh:mm:ss a'},\n]\n\nexport const resolveTimeFormat = (timeFormat: string) => {\n if (FORMAT_OPTIONS.find(d => d.text === timeFormat)) {\n return timeFormat\n }\n\n return DEFAULT_TIME_FORMAT\n}\n","// React\nimport {Dispatch} from 'react'\n\n// Redux\nimport {writeThenFetchAndSetAnnotations} from 'src/annotations/actions/thunks'\n\nimport {AnnotationsList} from 'src/types'\n\nimport {showOverlay, dismissOverlay} from 'src/overlays/actions/overlays'\nimport {event} from 'src/cloud/utils/reporting'\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n annotationsUnsupportedOnGraph,\n createAnnotationFailed,\n} from 'src/shared/copy/notifications'\nimport {getErrorMessage} from 'src/utils/api'\n\nimport {\n AnnotationLayerConfig,\n Config,\n InfluxColors,\n InteractionHandlerArguments,\n} from '@influxdata/giraffe'\n\nconst makeCreateMethod = (\n dispatch: Dispatch,\n cellID: string,\n eventPrefix = 'xyplot'\n) => {\n const createAnnotation = async userModifiedAnnotation => {\n const {summary, startTime, endTime, type} = userModifiedAnnotation\n\n const actualEndTime = type === 'point' ? startTime : endTime\n\n try {\n await dispatch(\n writeThenFetchAndSetAnnotations([\n {\n summary,\n stream: cellID,\n startTime: new Date(startTime).getTime(),\n endTime: new Date(actualEndTime).getTime(),\n },\n ])\n )\n event(`annotations.create_annotation.create`, {\n prefix: eventPrefix,\n type,\n })\n } catch (err) {\n dispatch(notify(createAnnotationFailed(getErrorMessage(err))))\n event(`annotations.create_annotation.failure`, {\n prefix: eventPrefix,\n type,\n })\n }\n }\n\n return createAnnotation\n}\n\n// for point annotations only:\n// (initially, the user can then change to a range once the dialog is up)\nconst makeAnnotationClickListener = (\n dispatch: Dispatch,\n cellID: string,\n eventPrefix = 'xyplot'\n) => {\n const createAnnotation = makeCreateMethod(dispatch, cellID, eventPrefix)\n\n const singleClickHandler = (plotInteraction: InteractionHandlerArguments) => {\n event(`annotations.create_annotation.show_overlay`, {prefix: eventPrefix})\n\n dispatch(\n showOverlay(\n 'add-annotation',\n {\n createAnnotation,\n startTime: plotInteraction?.clampedValueX ?? plotInteraction.valueX,\n eventPrefix,\n cellID,\n },\n () => {\n dismissOverlay()\n }\n )\n )\n }\n\n return singleClickHandler\n}\n\nconst makeAnnotationRangeListener = (\n dispatch: Dispatch,\n cellID: string,\n eventPrefix = 'xyplot'\n) => {\n const createAnnotation = makeCreateMethod(dispatch, cellID, eventPrefix)\n\n const rangeHandler = (start: number | string, end: number | string) => {\n event(`annotations.create_range_annotation.show_overlay`, {\n prefix: eventPrefix,\n })\n dispatch(\n showOverlay(\n 'add-annotation',\n {\n createAnnotation,\n startTime: start,\n endTime: end,\n range: true,\n eventPrefix,\n cellID,\n },\n () => {\n dismissOverlay()\n }\n )\n )\n }\n\n return rangeHandler\n}\n\n/**\n * For editing annotations\n *\n * This handles both point and range annotations\n * Point annotations have an stop time, it just is equal to the start time\n *\n * The editing form will show the correct fields (it shows the stop time if the times are different,\n * else shows just the start time.\n *\n * so just need one handler for both types of annotations\n * */\nconst makeAnnotationClickHandler = (\n cellID: string,\n dispatch: Dispatch,\n annotations: AnnotationsList,\n eventPrefix = 'xyplot'\n) => {\n const clickHandler = (id: string) => {\n const annotationToEdit = annotations[cellID].find(\n annotation => annotation.id === id\n )\n if (annotationToEdit) {\n event(`annotations.edit_annotation.show_overlay`, {\n prefix: eventPrefix,\n })\n dispatch(\n showOverlay(\n 'edit-annotation',\n {\n clickedAnnotation: {\n ...annotationToEdit,\n stream: cellID,\n eventPrefix,\n },\n cellID,\n },\n () => {\n dismissOverlay()\n }\n )\n )\n }\n }\n return clickHandler\n}\n\n// want all the ranges *before* all the points,\n// so that can click on points that overlap ranges\n// exporting for testing\nexport const sortAnnotations = (anno1, anno2) => {\n // if they are both ranges or both points, return 0\n // if anno1 is a range, and anno2 is a point return -1;\n // else return 1\n\n const anno1Value = anno1.startTime === anno1.endTime ? 1 : 0\n const anno2Value = anno2.startTime === anno2.endTime ? 1 : 0\n\n return anno1Value - anno2Value\n}\nconst makeAnnotationLayer = (\n cellID: string,\n xColumn: string,\n yColumn: string,\n groupKey: string[],\n annotations: AnnotationsList,\n annotationsAreVisible: boolean,\n dispatch: Dispatch,\n eventPrefix = 'xyplot'\n) => {\n const cellAnnotations = annotations ? annotations[cellID] ?? [] : []\n\n const annotationsToRender: any[] = cellAnnotations\n .sort(sortAnnotations)\n .map(annotation => {\n return {\n ...annotation,\n color: InfluxColors.Honeydew,\n }\n })\n\n const handleAnnotationClick = makeAnnotationClickHandler(\n cellID,\n dispatch,\n annotations,\n eventPrefix\n )\n\n if (annotationsAreVisible && annotationsToRender.length) {\n const annotationLayer: AnnotationLayerConfig = {\n type: 'annotation',\n x: xColumn,\n y: yColumn,\n fill: groupKey,\n handleAnnotationClick,\n annotations: annotationsToRender.map(annotation => {\n return {\n id: annotation.id,\n title: annotation.summary,\n description: '',\n color: annotation.color,\n startValue: new Date(annotation.startTime).getTime(),\n stopValue: new Date(annotation.endTime).getTime(),\n dimension: 'x',\n pin: 'start',\n }\n }),\n }\n\n return annotationLayer\n }\n return null\n}\n\nexport const addAnnotationLayer = (\n config: Config,\n inAnnotationMode: boolean,\n cellID: string,\n xColumn: string,\n yColumn: string,\n groupKey: string[],\n annotations: AnnotationsList,\n dispatch: Dispatch,\n eventPrefix = 'xyplot'\n) => {\n if (inAnnotationMode && cellID) {\n config.interactionHandlers = {\n singleShiftClick: makeAnnotationClickListener(\n dispatch,\n cellID,\n eventPrefix\n ),\n }\n config.interactionHandlers.onXBrush = makeAnnotationRangeListener(\n dispatch,\n cellID,\n eventPrefix\n )\n }\n\n const annotationLayer: AnnotationLayerConfig = makeAnnotationLayer(\n cellID,\n xColumn,\n yColumn,\n groupKey,\n annotations,\n inAnnotationMode,\n dispatch,\n eventPrefix\n )\n\n if (annotationLayer) {\n config.layers.push(annotationLayer)\n }\n}\n\nexport const handleUnsupportedGraphType = graphType => {\n return notify(annotationsUnsupportedOnGraph(graphType))\n}\n","import {resolveTimeFormat} from 'src/visualization/utils/timeFormat'\nimport {Base, TimeZone} from 'src/types'\nimport {VIS_SIG_DIGITS} from 'src/shared/constants'\nimport {DEFAULT_TIME_FORMAT} from 'src/utils/datetime/constants'\nimport {\n binaryPrefixFormatter,\n timeFormatter,\n siPrefixFormatter,\n ColumnType,\n} from '@influxdata/giraffe'\n\ninterface GetFormatterOptions {\n prefix?: string\n suffix?: string\n base?: Base\n timeZone?: TimeZone\n trimZeros?: boolean\n timeFormat?: string\n format?: boolean\n}\n\nexport const getFormatter = (\n columnType: ColumnType,\n {\n prefix,\n suffix,\n base,\n timeZone,\n trimZeros = true,\n timeFormat = DEFAULT_TIME_FORMAT,\n }: GetFormatterOptions = {}\n): null | ((x: any) => string) => {\n if (columnType === 'number' && base === '2') {\n return binaryPrefixFormatter({\n prefix,\n suffix,\n significantDigits: VIS_SIG_DIGITS,\n format: true,\n })\n }\n\n if (columnType === 'number' && base === '10') {\n return siPrefixFormatter({\n prefix,\n suffix,\n significantDigits: VIS_SIG_DIGITS,\n trimZeros,\n format: true,\n })\n }\n\n if (columnType === 'number' && base === '') {\n return siPrefixFormatter({\n prefix,\n suffix,\n significantDigits: VIS_SIG_DIGITS,\n trimZeros,\n format: false,\n })\n }\n\n if (columnType === 'time') {\n const formatOptions = {\n timeZone: timeZone === 'Local' ? undefined : timeZone,\n format: resolveTimeFormat(timeFormat),\n }\n if (formatOptions.format.includes('HH')) {\n formatOptions['hour12'] = false\n }\n return timeFormatter(formatOptions)\n }\n\n return null\n}\n","// Libraries\nimport {useEffect, useMemo, useState} from 'react'\nimport {useSelector} from 'react-redux'\nimport {NumericColumnData, fromFlux} from '@influxdata/giraffe'\nimport {isEqual} from 'lodash'\n\n// API\nimport {runQuery, RunQueryResult} from 'src/shared/apis/query'\n\n// Selectors\nimport {getOrg} from 'src/organizations/selectors'\nimport {getStartTime, getEndTime} from 'src/timeMachine/selectors/index'\nimport {getAllVariablesForZoomRequery} from 'src/variables/selectors'\n\n// Utils\nimport {useOneWayState} from 'src/shared/utils/useOneWayState'\nimport {extent} from 'src/shared/utils/vis'\nimport {buildUsedVarsOption} from 'src/variables/utils/buildVarsOption'\nimport {event} from 'src/cloud/utils/reporting'\nimport {\n getWindowPeriodFromVariables,\n getWindowVarsFromVariables,\n normalizeWindowPeriodForZoomRequery,\n normalizeWindowPeriodVariableForZoomRequery,\n} from 'src/variables/utils/getWindowVars'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\n// Types\nimport {AppState, InternalFromFluxResult, TimeRange} from 'src/types'\nimport {RemoteDataState} from '@influxdata/clockface'\n\n/*\n This hook helps map the domain setting stored for line graph to the\n appropriate settings on a @influxdata/giraffe `Config` object.\n\n If the domain setting is present, it should be used. If the domain setting is\n not present, then the min/max values shown should be derived from the data\n passed to the plot.\n*/\nexport const getValidRange = (\n data: string[] | NumericColumnData = [],\n timeRange: TimeRange | null\n) => {\n const range = extent(data as number[])\n if (timeRange === null) {\n return range\n }\n if (range && range.length >= 2) {\n const startTime = getStartTime(timeRange)\n const endTime = getEndTime(timeRange)\n const start = Math.min(startTime, range[0])\n const end = Math.max(endTime, range[1])\n return [start, end]\n }\n return range\n}\n\nexport const useVisXDomainSettings = (\n storedDomain: number[],\n data: NumericColumnData,\n timeRange: TimeRange | null = null\n) => {\n const initialDomain = useMemo(() => {\n if (storedDomain) {\n return storedDomain\n }\n\n return getValidRange(data, timeRange)\n }, [storedDomain, data]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const [domain, setDomain] = useOneWayState(initialDomain)\n\n const setVisXDomain = (domain: NumericColumnData) => {\n setDomain(domain)\n event('plot.zoom_in.xAxis', {zoomRequery: 'false'})\n }\n\n const resetDomain = () => {\n setDomain(initialDomain)\n event('plot.zoom_restore.xAxis', {zoomRequery: 'false'})\n }\n\n return [domain, setVisXDomain, resetDomain]\n}\n\nconst isValidStoredDomainValue = (value): boolean => {\n return (\n typeof value === 'number' && !Number.isNaN(value) && Number.isFinite(value)\n )\n}\n\nexport const getRemainingRange = (\n data: string[] | NumericColumnData = [],\n timeRange: TimeRange | null,\n storedDomain: number[]\n) => {\n const range = extent(data as number[])\n if (Array.isArray(range) && range.length >= 2) {\n const startTime = getStartTime(timeRange)\n const endTime = getEndTime(timeRange)\n const start = isValidStoredDomainValue(storedDomain[0])\n ? storedDomain[0]\n : Math.min(startTime, range[0])\n const end = isValidStoredDomainValue(storedDomain[1])\n ? storedDomain[1]\n : Math.max(endTime, range[1])\n return [start, end]\n }\n return range\n}\n\nexport const useVisYDomainSettings = (\n storedDomain: number[],\n data: NumericColumnData | string[],\n timeRange: TimeRange | null = null\n) => {\n const initialDomain = useMemo(() => {\n if (\n !Array.isArray(storedDomain) ||\n storedDomain.every(val => val === null)\n ) {\n return getValidRange(data, timeRange)\n }\n if (storedDomain.includes(null)) {\n return getRemainingRange(data, timeRange, storedDomain)\n }\n return storedDomain\n }, [storedDomain, data]) // eslint-disable-line react-hooks/exhaustive-deps\n\n const [domain, setDomain] = useOneWayState(initialDomain)\n\n const setVisYDomain = (domain: NumericColumnData | string) => {\n setDomain(domain)\n event('plot.zoom_in.yAxis', {zoomRequery: 'false'})\n }\n\n const resetDomain = () => {\n setDomain(initialDomain)\n event('plot.zoom_restore.yAxis', {zoomRequery: 'false'})\n }\n\n return [domain, setVisYDomain, resetDomain]\n}\n\ninterface ZoomRequeryArgs {\n adaptiveZoomHide: boolean\n data: NumericColumnData | string[]\n parsedResult: InternalFromFluxResult\n preZoomResult: InternalFromFluxResult\n query: string\n setPreZoomResult: Function\n setRequeryStatus: Function\n setResult: Function\n storedDomain: number[]\n timeRange?: TimeRange\n transmitWindowPeriod?: (windowPeriod: number | string) => void\n}\n\nconst isNotEqual = (firstValue: any, secondValue: any): boolean =>\n isEqual(firstValue, secondValue) === false\n\nexport const useZoomRequeryXDomainSettings = (args: ZoomRequeryArgs) => {\n const {\n adaptiveZoomHide,\n data,\n parsedResult,\n preZoomResult,\n query,\n setPreZoomResult,\n setRequeryStatus,\n setResult,\n storedDomain,\n timeRange = null,\n transmitWindowPeriod,\n } = args\n\n const {type: timeRangeType} = timeRange ? timeRange : {type: 'duration'}\n const [selectedTimeRange, setSelectedTimeRange] = useState(timeRange)\n const initialDomain = useMemo(() => {\n if (storedDomain) {\n return storedDomain\n }\n\n return getValidRange(data, timeRange)\n }, [storedDomain, data]) // eslint-disable-line react-hooks/exhaustive-deps\n\n /*\n * preZoomDomain:\n * - can be changed only by the query results\n * - can be changed by the time range dropdown\n * - uses one-way state to capture the very first set of values\n */\n const [preZoomDomain, setPreZoomDomain] = useOneWayState(initialDomain)\n\n /*\n * domain:\n * - can be changed by user action: zooming or unzooming\n * - zooming will trigger a new query if the windowPeriod changes\n * - unzooming will revert the query results back to its original state\n * (before zooming), but does not query\n *\n * - can be changed also by the preZoomDomain, by syncing,\n * to keep the graph fitted, and does not query\n */\n const [domain, setDomain] = useState(initialDomain)\n\n const getAllVariablesWithTimeDomain = (state: AppState) =>\n getAllVariablesForZoomRequery(state, timeRange ? domain : [], timeRangeType)\n const orgId = useSelector(getOrg)?.id\n const variables = useSelector(getAllVariablesWithTimeDomain)\n\n const [windowPeriod, setWindowPeriod] = useState(\n normalizeWindowPeriodForZoomRequery(\n getWindowPeriodFromVariables(query, variables),\n timeRange,\n domain,\n data\n )\n )\n\n useEffect(() => {\n const updatedWindowPeriod = normalizeWindowPeriodForZoomRequery(\n getWindowPeriodFromVariables(query, variables),\n timeRange,\n domain,\n data\n )\n\n if (isNotEqual(windowPeriod, updatedWindowPeriod)) {\n setWindowPeriod(updatedWindowPeriod)\n\n if (isNotEqual(preZoomDomain, domain)) {\n const zoomQueryWindowVariable =\n normalizeWindowPeriodVariableForZoomRequery(\n getWindowVarsFromVariables(query, variables),\n updatedWindowPeriod\n )\n\n const extern = buildUsedVarsOption(\n query,\n variables,\n zoomQueryWindowVariable\n )\n\n setRequeryStatus(RemoteDataState.Loading)\n runQuery(orgId, query, extern).promise.then(\n (result: RunQueryResult) => {\n if (result?.type === 'SUCCESS') {\n setRequeryStatus(RemoteDataState.Done)\n if (result?.csv?.trim().length > 0) {\n setResult(fromFlux(result.csv))\n }\n } else {\n setRequeryStatus(RemoteDataState.Error)\n }\n }\n )\n }\n }\n }, [domain]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // sync preZoomDomain and domain\n // - when query results change to refit the graph\n // - when it is the time axis, then only if the timeRange has changed\n useEffect(() => {\n if (\n (!timeRange || isNotEqual(timeRange, selectedTimeRange)) &&\n isNotEqual(preZoomDomain, domain)\n ) {\n setSelectedTimeRange(timeRange)\n setDomain(preZoomDomain)\n }\n }, [preZoomDomain]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (timeRange) {\n transmitWindowPeriod(windowPeriod)\n }\n }, [timeRange, transmitWindowPeriod, windowPeriod])\n\n // Suppresses adaptive zoom feature; must come after all hooks\n if (!isFlagEnabled('zoomRequery') || adaptiveZoomHide) {\n const setVisXDomain = (domain: NumericColumnData) => {\n setPreZoomDomain(domain)\n event('plot.zoom_in.xAxis', {zoomRequery: 'false'})\n }\n\n const resetDomain = () => {\n setPreZoomDomain(initialDomain)\n event('plot.zoom_restore.xAxis', {zoomRequery: 'false'})\n }\n return [preZoomDomain, setVisXDomain, resetDomain]\n }\n\n const setZoomDomain = (updatedDomain: number[]) => {\n setRequeryStatus(RemoteDataState.NotStarted)\n if (!preZoomResult) {\n setPreZoomResult(parsedResult)\n }\n setDomain(updatedDomain)\n event('plot.zoom_in.xAxis', {zoomRequery: 'true'}, {orgId})\n }\n\n const resetZoomDomain = () => {\n setRequeryStatus(RemoteDataState.NotStarted)\n if (preZoomResult) {\n setResult(preZoomResult)\n setPreZoomResult(null)\n }\n setDomain(preZoomDomain)\n event('plot.zoom_restore.xAxis', {zoomRequery: 'true'}, {orgId})\n }\n\n return [domain, setZoomDomain, resetZoomDomain]\n}\n\nexport const useZoomRequeryYDomainSettings = (args: ZoomRequeryArgs) => {\n const {\n adaptiveZoomHide,\n data,\n parsedResult,\n preZoomResult,\n query,\n setPreZoomResult,\n setRequeryStatus,\n setResult,\n storedDomain,\n timeRange = null,\n transmitWindowPeriod,\n } = args\n\n const {type: timeRangeType} = timeRange ? timeRange : {type: 'duration'}\n const [selectedTimeRange, setSelectedTimeRange] = useState(timeRange)\n const initialDomain = useMemo(() => {\n if (\n !Array.isArray(storedDomain) ||\n storedDomain.every(val => val === null)\n ) {\n return getValidRange(data, timeRange)\n }\n if (storedDomain.includes(null)) {\n return getRemainingRange(data, timeRange, storedDomain)\n }\n return storedDomain\n }, [storedDomain, data]) // eslint-disable-line react-hooks/exhaustive-deps\n\n /*\n * preZoomDomain:\n * - can be changed only by the query results\n * - can be changed by the time range dropdown\n * - uses one-way state to capture the very first set of values\n */\n const [preZoomDomain, setPreZoomDomain] = useOneWayState(initialDomain)\n\n /*\n * domain:\n * - can be changed by user action: zooming or unzooming\n * - zooming will trigger a new query if the windowPeriod changes\n * - unzooming will revert the query results back to its original state\n * (before zooming), but does not query\n *\n * - can be changed also by the preZoomDomain, by syncing,\n * to keep the graph fitted, and does not query\n */\n const [domain, setDomain] = useState(initialDomain)\n\n const getAllVariablesWithTimeDomain = (state: AppState) =>\n getAllVariablesForZoomRequery(state, timeRange ? domain : [], timeRangeType)\n const orgId = useSelector(getOrg)?.id\n const variables = useSelector(getAllVariablesWithTimeDomain)\n\n const [windowPeriod, setWindowPeriod] = useState(\n normalizeWindowPeriodForZoomRequery(\n getWindowPeriodFromVariables(query, variables),\n timeRange,\n domain,\n data\n )\n )\n\n useEffect(() => {\n const updatedWindowPeriod = normalizeWindowPeriodForZoomRequery(\n getWindowPeriodFromVariables(query, variables),\n timeRange,\n domain,\n data\n )\n\n if (isNotEqual(windowPeriod, updatedWindowPeriod)) {\n setWindowPeriod(updatedWindowPeriod)\n\n if (isNotEqual(preZoomDomain, domain)) {\n const zoomQueryWindowVariable =\n normalizeWindowPeriodVariableForZoomRequery(\n getWindowVarsFromVariables(query, variables),\n updatedWindowPeriod\n )\n\n const extern = buildUsedVarsOption(\n query,\n variables,\n zoomQueryWindowVariable\n )\n\n setRequeryStatus(RemoteDataState.Loading)\n runQuery(orgId, query, extern).promise.then(\n (result: RunQueryResult) => {\n if (result?.type === 'SUCCESS') {\n setRequeryStatus(RemoteDataState.Done)\n if (result?.csv?.trim().length > 0) {\n setResult(fromFlux(result.csv))\n }\n } else {\n setRequeryStatus(RemoteDataState.Error)\n }\n }\n )\n }\n }\n }, [domain]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // sync preZoomDomain and domain\n // - when query results change to refit the graph\n // - when it is the time axis, then only if the timeRange has changed\n useEffect(() => {\n if (\n (!timeRange || isNotEqual(timeRange, selectedTimeRange)) &&\n isNotEqual(preZoomDomain, domain)\n ) {\n setSelectedTimeRange(timeRange)\n setDomain(preZoomDomain)\n }\n }, [preZoomDomain]) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (timeRange) {\n transmitWindowPeriod(windowPeriod)\n }\n }, [timeRange, transmitWindowPeriod, windowPeriod])\n\n // Suppresses adaptive zoom feature; must come after all hooks\n if (!isFlagEnabled('zoomRequery') || adaptiveZoomHide) {\n const setVisYDomain = (domain: NumericColumnData | string) => {\n setPreZoomDomain(domain)\n event('plot.zoom_in.yAxis', {zoomRequery: 'false'})\n }\n\n const resetDomain = () => {\n setPreZoomDomain(initialDomain)\n event('plot.zoom_restore.yAxis', {zoomRequery: 'false'})\n }\n return [preZoomDomain, setVisYDomain, resetDomain]\n }\n\n const setZoomDomain = (updatedDomain: number[]) => {\n setRequeryStatus(RemoteDataState.NotStarted)\n if (!preZoomResult) {\n setPreZoomResult(parsedResult)\n }\n setDomain(updatedDomain)\n event('plot.zoom_in.yAxis', {zoomRequery: 'true'}, {orgId})\n }\n\n const resetDomain = () => {\n setRequeryStatus(RemoteDataState.NotStarted)\n if (preZoomResult) {\n setResult(preZoomResult)\n setPreZoomResult(null)\n }\n setDomain(preZoomDomain)\n event('plot.zoom_restore.yAxis', {zoomRequery: 'true'}, {orgId})\n }\n\n return [domain, setZoomDomain, resetDomain]\n}\n","import React, {FC, useContext, useEffect, useMemo, useCallback} from 'react'\nimport {PipeData, FluxResult} from 'src/types/flows'\nimport {FlowContext} from 'src/flows/context/flow.current'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {QueryScope} from 'src/shared/contexts/query'\nimport {ResultsContext} from 'src/flows/context/results'\nimport {RemoteDataState, TimeRange} from 'src/types'\nimport {useHistory, useLocation} from 'react-router-dom'\n\nexport interface PipeContextType {\n id: string\n data: PipeData\n range: TimeRange\n update: (data: PipeData) => void\n loading: RemoteDataState\n results: FluxResult\n readOnly: boolean\n scope: QueryScope\n}\n\nconst DEFAULT_CONTEXT: PipeContextType = {\n id: '',\n data: {},\n range: null,\n update: () => {},\n loading: RemoteDataState.NotStarted,\n results: {\n source: '',\n parsed: {},\n } as FluxResult,\n readOnly: false,\n scope: {\n region: '',\n org: '',\n },\n}\n\nexport const PipeContext = React.createContext(DEFAULT_CONTEXT)\n\ninterface PipeContextProps {\n id: string\n}\n\nexport const PipeProvider: FC = ({id, children}) => {\n const {flow, updateData} = useContext(FlowContext)\n const {getPanelQueries} = useContext(FlowQueryContext)\n const {results, statuses} = useContext(ResultsContext)\n const result = results[id]\n const status = statuses[id]\n\n const history = useHistory()\n const {search} = useLocation()\n\n const panel = new URLSearchParams(search).get('panel')\n const statusValues = Object.values(statuses).every(\n stat => stat !== undefined && stat !== RemoteDataState.Loading\n )\n\n useEffect(() => {\n if (panel && statusValues) {\n document.getElementById(panel)?.scrollIntoView()\n setTimeout(() => {\n // then remove the deep linked panel from the URL?\n history.push(window.location.pathname)\n }, 1000)\n }\n }, [history, panel, statusValues])\n\n const updater = useCallback(\n (data: Partial) => {\n updateData(id, data)\n },\n [flow, updateData]\n )\n\n const scope = getPanelQueries(id)?.scope\n\n return useMemo(() => {\n return (\n \n {children}\n \n )\n }, [flow, id, result, status, children, updater, scope])\n}\n","import {XYViewProperties} from 'src/types'\nimport {addedDiff, deletedDiff} from 'deep-object-diff'\nimport {getNominalColorScale} from '@influxdata/giraffe'\nimport {DEFAULT_LINE_COLORS} from 'src/shared/constants/graphColorPalettes'\n\n/**\n * Evaluates whether mappings need to be updated\n * @param map1\n * @param map2\n */\nconst compareIDPEandLocalMappings = (map1, map2) => {\n // SPECIAL CASE: handle null case when colorMapping from IDPE is `null`\n if (!map1) {\n return {isMappingReusable: false, additions: map2}\n }\n\n function isEmpty(obj) {\n return Object.keys(obj).length === 0\n }\n\n const additions = addedDiff(map1, map2)\n const deletions = deletedDiff(map1, map2)\n\n // if no additions or no deletions we are good to go\n const isMappingReusable = isEmpty(additions) && isEmpty(deletions)\n\n return {isMappingReusable, additions, deletions}\n}\n\n/**\n * Returns the colorMapping objects for UI, based on the state of the current view it will return the existing or generate a new one and request trigger saving to IDPE\n * @param columnGroupMap\n * @param properties\n * @returns an object shaped : {colorMappingForIDPE?, colorMappingForGiraffe?, needsToSaveToIDPE}\n */\n\nexport const getColorMappingObjects = (\n columnGroupMap,\n properties: XYViewProperties\n) => {\n const seriesToColorHexMap = generateSeriesToColorHex(\n columnGroupMap,\n properties\n )\n\n const {isMappingReusable} = compareIDPEandLocalMappings(\n properties.colorMapping,\n seriesToColorHexMap\n )\n\n // if the mappings from the IDPE and the *required* one's for the current view are the same, we don't need to generate new mappings\n if (isMappingReusable) {\n const columnKeys = columnGroupMap.columnKeys\n const mappings = {...columnGroupMap}\n const needsToSaveToIDPE = false\n\n mappings.mappings.forEach(graphLine => {\n const seriesID = getSeriesId(graphLine, columnKeys)\n\n // this is needed for giraffe\n graphLine.color = properties.colorMapping[seriesID]\n })\n\n return {\n colorMappingForGiraffe: {columnKeys, ...mappings},\n needsToSaveToIDPE,\n }\n } else {\n const columnKeys = columnGroupMap.columnKeys\n const mappings = {...columnGroupMap}\n const needsToSaveToIDPE = true\n\n mappings.mappings.forEach(graphLine => {\n const seriesID = getSeriesId(graphLine, columnKeys)\n\n // this is needed for giraffe\n graphLine.color = seriesToColorHexMap[seriesID]\n })\n\n const newColorMappingForGiraffe = {\n ...mappings,\n }\n\n const {additions, deletions} = compareIDPEandLocalMappings(\n properties.colorMapping,\n seriesToColorHexMap\n )\n\n const colorMappingForIDPE = {...properties.colorMapping}\n\n // perform additions\n for (const add in additions) {\n colorMappingForIDPE[add] = seriesToColorHexMap[add]\n }\n\n // perform deletions\n for (const minus in deletions) {\n delete colorMappingForIDPE[minus]\n }\n\n return {\n colorMappingForIDPE: colorMappingForIDPE,\n colorMappingForGiraffe: newColorMappingForGiraffe,\n needsToSaveToIDPE,\n }\n }\n}\n\n/**\n * This function returns the series id of the graphLine.\n * Example Graph line would look like:\n * {\n * _start: `${MOCK_START}`,\n * _stop: `${MOCK_STOP}`,\n * _field: 'co',\n * _measurement: 'airSensors',\n * sensor_id: 'TLM0102',\n * result: 'mean',\n * },\n *\n * The columnKeys are:\n * columnKeys: [\n * '_start',\n * '_stop',\n * '_field',\n * '_measurement',\n * 'sensor_id',\n * 'result',\n * ],\n *\n * the seriesID would be : \"co-airSensors-TLM0102-mean-\"\n *\n * @param graphLine\n * @param columnKeys\n */\nconst getSeriesId = (graphLine, columnKeys) => {\n let id = ''\n for (const key of columnKeys) {\n // ignore the '_start' and '_stop' columns when generating the ID.\n if (key !== '_start' && key !== '_stop') {\n id += graphLine[key] + '-'\n }\n }\n return id\n}\n\n/**\n * This function generates a map that maps the series ID to the color Index.\n * @param columnGroupMap - generated using the createGroupIDColumn function\n * @param properties - XYViewProperties\n * @returns - a map that contains the series ID and it's color hex value\n */\n\nexport const generateSeriesToColorHex = (\n columnGroupMap,\n properties: XYViewProperties\n) => {\n const seriesToColorHex = {}\n const cgMap = {...columnGroupMap}\n cgMap.mappings.forEach((graphLine, colorIndex) => {\n const id = getSeriesId(graphLine, columnGroupMap.columnKeys)\n let colors\n if (Array.isArray(properties.colors) && properties.colors.length) {\n // takes care of when properties.colors is NOT undefined, and NOT an empty array\n colors = properties.colors\n } else {\n // when array is undefined or array IS empty.\n colors = DEFAULT_LINE_COLORS\n }\n const colorsHexArray = colors.map(value => value.hex)\n const fillScale = getNominalColorScale(columnGroupMap, colorsHexArray)\n seriesToColorHex[id] = fillScale(colorIndex)\n })\n\n return {...seriesToColorHex}\n}\n","// Libraries\nimport React, {FC} from 'react'\nimport {Config, Plot} from '@influxdata/giraffe'\n\n// Types\nimport {SimpleTableViewProperties} from 'src/types'\nimport {FluxResult} from 'src/types/flows'\nimport {VisualizationProps} from 'src/visualization'\n\ninterface Props extends VisualizationProps {\n properties: SimpleTableViewProperties\n result: FluxResult['parsed']\n}\n\nconst SimpleTable: FC = ({properties, result}) => {\n const config: Config = {\n fromFluxResult: result,\n layers: [\n {\n type: 'simple table',\n showAll: properties.showAll,\n },\n ],\n }\n return \n}\n\nexport default SimpleTable\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport type AnnotationList = Array<{\n stream?: string\n annotations?: Array<{\n id?: string\n summary?: string\n message?: string\n stickers?: any\n startTime?: string\n endTime?: string\n }>\n}>\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport type AnnotationCreateList = AnnotationCreate[]\n\nexport type AnnotationCreate = Annotation & {\n stream?: string\n}\n\nexport interface Annotation {\n summary?: string\n message?: string\n stickers?: any\n startTime?: string\n endTime?: string\n}\n\nexport type AnnotationEventList = AnnotationEvent[]\n\nexport type AnnotationEvent = Annotation & {\n stream?: string\n id?: string\n}\n\nexport type StreamList = ReadStream[]\n\nexport interface ReadStream {\n id?: string\n stream?: string\n description?: string\n createdAt?: string\n updatedAt?: string\n}\n\nexport interface Stream {\n stream?: string\n description?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetAnnotationsParams {\n query?: {\n AnnotationListFilter?: any\n orgID?: string\n }\n}\n\ntype GetAnnotationsResult =\n | GetAnnotationsOKResult\n | GetAnnotationsBadRequestResult\n | GetAnnotationsUnauthorizedResult\n | GetAnnotationsInternalServerErrorResult\n\ninterface GetAnnotationsOKResult {\n status: 200\n headers: Headers\n data: AnnotationList\n}\n\ninterface GetAnnotationsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetAnnotationsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetAnnotationsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getAnnotations = (\n params: GetAnnotationsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/annotations',\n params,\n options\n ) as Promise\n\nexport interface PostAnnotationParams {\n data?: AnnotationCreateList\n\n query?: {\n orgID?: string\n }\n}\n\ntype PostAnnotationResult =\n | PostAnnotationOKResult\n | PostAnnotationNoContentResult\n | PostAnnotationBadRequestResult\n | PostAnnotationUnauthorizedResult\n | PostAnnotationInternalServerErrorResult\n\ninterface PostAnnotationOKResult {\n status: 200\n headers: Headers\n data: AnnotationEventList\n}\n\ninterface PostAnnotationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostAnnotationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostAnnotationUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostAnnotationInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postAnnotation = (\n params: PostAnnotationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/annotations',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteAnnotationsParams {\n query: {\n AnnotationDeleteFilter: any\n orgID?: string\n }\n}\n\ntype DeleteAnnotationsResult =\n | DeleteAnnotationsNoContentResult\n | DeleteAnnotationsBadRequestResult\n | DeleteAnnotationsUnauthorizedResult\n | DeleteAnnotationsInternalServerErrorResult\n\ninterface DeleteAnnotationsNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteAnnotationsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteAnnotationsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteAnnotationsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteAnnotations = (\n params: DeleteAnnotationsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n '/api/v2private/annotations',\n params,\n options\n ) as Promise\n\nexport interface GetAnnotationParams {\n annotationID: string\n}\n\ntype GetAnnotationResult =\n | GetAnnotationOKResult\n | GetAnnotationUnauthorizedResult\n | GetAnnotationNotFoundResult\n | GetAnnotationInternalServerErrorResult\n | GetAnnotationDefaultResult\n\ninterface GetAnnotationOKResult {\n status: 200\n headers: Headers\n data: AnnotationEvent\n}\n\ninterface GetAnnotationUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetAnnotationNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetAnnotationInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetAnnotationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getAnnotation = (\n params: GetAnnotationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/annotations/${params.annotationID}`,\n params,\n options\n ) as Promise\n\nexport interface PutAnnotationParams {\n annotationID: string\n\n data?: AnnotationCreate\n}\n\ntype PutAnnotationResult =\n | PutAnnotationOKResult\n | PutAnnotationBadRequestResult\n | PutAnnotationUnauthorizedResult\n | PutAnnotationNotFoundResult\n | PutAnnotationInternalServerErrorResult\n\ninterface PutAnnotationOKResult {\n status: 200\n headers: Headers\n data: AnnotationEvent\n}\n\ninterface PutAnnotationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutAnnotationUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutAnnotationNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutAnnotationInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putAnnotation = (\n params: PutAnnotationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/annotations/${params.annotationID}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteAnnotationParams {\n annotationID: string\n}\n\ntype DeleteAnnotationResult =\n | DeleteAnnotationNoContentResult\n | DeleteAnnotationBadRequestResult\n | DeleteAnnotationUnauthorizedResult\n | DeleteAnnotationInternalServerErrorResult\n\ninterface DeleteAnnotationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteAnnotationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteAnnotationUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteAnnotationInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteAnnotation = (\n params: DeleteAnnotationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2private/annotations/${params.annotationID}`,\n params,\n options\n ) as Promise\n\nexport interface GetStreamsParams {\n query?: {\n StreamListFilter?: any\n orgID?: string\n }\n}\n\ntype GetStreamsResult =\n | GetStreamsOKResult\n | GetStreamsBadRequestResult\n | GetStreamsUnauthorizedResult\n | GetStreamsInternalServerErrorResult\n\ninterface GetStreamsOKResult {\n status: 200\n headers: Headers\n data: StreamList\n}\n\ninterface GetStreamsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetStreamsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetStreamsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getStreams = (\n params: GetStreamsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/streams',\n params,\n options\n ) as Promise\n\nexport interface PutStreamsParams {\n data?: Stream\n\n query?: {\n orgID?: string\n }\n}\n\ntype PutStreamsResult =\n | PutStreamsOKResult\n | PutStreamsBadRequestResult\n | PutStreamsUnauthorizedResult\n | PutStreamsInternalServerErrorResult\n\ninterface PutStreamsOKResult {\n status: 200\n headers: Headers\n data: ReadStream\n}\n\ninterface PutStreamsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutStreamsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutStreamsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putStreams = (\n params: PutStreamsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n '/api/v2private/streams',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteStreamsParams {\n query: {\n StreamDeleteFilter: any\n orgID?: string\n }\n}\n\ntype DeleteStreamsResult =\n | DeleteStreamsNoContentResult\n | DeleteStreamsBadRequestResult\n | DeleteStreamsUnauthorizedResult\n | DeleteStreamsInternalServerErrorResult\n\ninterface DeleteStreamsNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteStreamsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteStreamsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteStreamsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteStreams = (\n params: DeleteStreamsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n '/api/v2private/streams',\n params,\n options\n ) as Promise\n\nexport interface PutStreamParams {\n streamID: string\n\n data?: Stream\n}\n\ntype PutStreamResult =\n | PutStreamOKResult\n | PutStreamBadRequestResult\n | PutStreamUnauthorizedResult\n | PutStreamNotFoundResult\n | PutStreamInternalServerErrorResult\n\ninterface PutStreamOKResult {\n status: 200\n headers: Headers\n data: ReadStream\n}\n\ninterface PutStreamBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PutStreamUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PutStreamNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutStreamInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putStream = (\n params: PutStreamParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/streams/${params.streamID}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteStreamParams {\n streamID: string\n}\n\ntype DeleteStreamResult =\n | DeleteStreamNoContentResult\n | DeleteStreamBadRequestResult\n | DeleteStreamUnauthorizedResult\n | DeleteStreamInternalServerErrorResult\n\ninterface DeleteStreamNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteStreamBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteStreamUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteStreamInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteStream = (\n params: DeleteStreamParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2private/streams/${params.streamID}`,\n params,\n options\n ) as Promise\n","// Types\nimport {GetAnnotationPayload} from 'src/types'\n\nexport const formatAnnotationQueryString = (\n annotation?: GetAnnotationPayload,\n requestType?: string\n): string => {\n const getAnnotationParams = new URLSearchParams({})\n\n if (annotation?.startTime) {\n getAnnotationParams.append('startTime', annotation.startTime)\n }\n\n if (annotation?.endTime) {\n getAnnotationParams.append('endTime', annotation.endTime)\n }\n\n if (annotation?.stream) {\n const streamParam = requestType === 'delete' ? 'stream' : 'streamIncludes'\n\n getAnnotationParams.append(streamParam, annotation.stream)\n }\n\n if (annotation?.stickers) {\n Object.keys(annotation.stickers).forEach((s: string) => {\n getAnnotationParams.append(\n `stickerIncludes[${s}]`,\n annotation.stickers[s]\n )\n })\n }\n\n return `${getAnnotationParams.toString()}`\n}\n","// Types\nimport {\n Annotation,\n AnnotationResponse,\n DeleteAnnotation,\n AnnotationStream,\n} from 'src/types'\n\nimport {\n deleteAnnotation as deleteAnnotationApi,\n getAnnotations as getAnnotationsApi,\n postAnnotation,\n putAnnotation,\n AnnotationEvent,\n Error as ResponseError,\n AnnotationList,\n} from 'src/client/annotationdRoutes'\n\n// Utils\nimport {formatAnnotationQueryString} from 'src/annotations/utils/formatQueryString'\n\nexport const getAnnotationStreams = (): Promise => {\n throw new Error('getAnnotationStreams is not implemented')\n}\n\nexport const writeAnnotation = async (\n annotations: Annotation[],\n orgID: string\n): Promise => {\n // RFC 3339 is the standard serialization format for dates across the wire for annotations\n const annotationsRequestConverted = annotations.map(annotation => {\n return {\n ...annotation,\n startTime: new Date(annotation.startTime).toISOString(),\n endTime: new Date(annotation.endTime).toISOString(),\n }\n })\n const params = {data: annotationsRequestConverted, query: {orgID}}\n const res = await postAnnotation(params)\n\n if (res.status >= 300) {\n throw new Error(res.data?.message)\n }\n\n const [{startTime, endTime, summary, message, stickers, stream}] = res.data\n\n return [\n {\n startTime,\n endTime,\n summary,\n message,\n stickers,\n stream,\n },\n ]\n}\n\nexport const getAnnotations = async (\n orgID: string,\n stream?: string\n): Promise => {\n const params = {\n query: {AnnotationListFilter: formatAnnotationQueryString({stream}), orgID},\n }\n const res = await getAnnotationsApi(params)\n if (res.status >= 300) {\n throw new Error((res.data as ResponseError).message)\n }\n\n return (res.data as AnnotationList).map((retrievedAnnotation: any) => ({\n stream: retrievedAnnotation.stream,\n annotations: retrievedAnnotation.annotations,\n }))\n}\n\nexport const updateAnnotation = async (\n newAnnotation: AnnotationEvent\n): Promise => {\n const params = {annotationID: newAnnotation.id, data: newAnnotation}\n const res = await putAnnotation(params)\n\n if (res.status >= 300) {\n throw new Error(res.data?.message)\n }\n\n return res.data\n}\n\nexport const deleteAnnotation = async (\n annotationToDelete: DeleteAnnotation\n): Promise => {\n const params = {annotationID: annotationToDelete.id}\n const res = await deleteAnnotationApi(params)\n\n if (res.status >= 300) {\n throw new Error(res.data?.message)\n }\n\n return res.status\n}\n","import {\n deleteAnnotation,\n getAnnotations,\n getAnnotationStreams,\n updateAnnotation,\n writeAnnotation,\n} from 'src/annotations/api'\nimport {Dispatch} from 'react'\nimport {\n setAnnotations,\n setAnnotationStreams,\n Action as AnnotationAction,\n editAnnotation as editAnnotationAction,\n deleteAnnotation as deleteAnnotationAction,\n} from 'src/annotations/actions/creators'\n\nimport {\n Annotation,\n AnnotationStream,\n NotificationAction,\n GetState,\n} from 'src/types'\n\n// Selectors\nimport {getOrg} from 'src/organizations/selectors'\n\nexport const fetchAndSetAnnotationStreams = async (\n dispatch: Dispatch\n): Promise => {\n const annotationStreams: AnnotationStream[] = await getAnnotationStreams()\n\n dispatch(setAnnotationStreams(annotationStreams))\n}\n\nexport const fetchAndSetAnnotations =\n () =>\n async (\n dispatch: Dispatch,\n getState: GetState\n ): Promise => {\n const org = getOrg(getState())\n const annotations = await getAnnotations(org.id)\n\n dispatch(setAnnotations(annotations))\n }\n\nexport const writeThenFetchAndSetAnnotations =\n (annotations: Annotation[]) =>\n async (\n dispatch: Dispatch,\n getState: GetState\n ): Promise => {\n const org = getOrg(getState())\n await writeAnnotation(annotations, org.id)\n\n fetchAndSetAnnotations()(dispatch, getState)\n }\n\nexport const deleteAnnotations =\n annotation =>\n async (dispatch: Dispatch) => {\n await deleteAnnotation({\n ...annotation,\n endTime: annotation.startTime,\n })\n dispatch(deleteAnnotationAction(annotation))\n }\n\nexport const editAnnotation =\n annotation =>\n async (dispatch: Dispatch) => {\n let {endTime} = annotation\n if (annotation.type === 'point') {\n endTime = annotation.startTime\n }\n\n const updatedAnnotation = await updateAnnotation({\n ...annotation,\n endTime,\n })\n dispatch(editAnnotationAction(updatedAnnotation))\n }\n","// Libraries\nimport React, {FC, useEffect} from 'react'\nimport classnames from 'classnames'\n\n// Component\nimport {DapperScrollbars} from '@influxdata/clockface'\n\n// Types\nimport {Fluxdocs} from 'src/client/fluxdocsdRoutes'\n\ninterface TooltipProps {\n item: Fluxdocs\n setToolTipPopup?: (boolean: boolean) => void\n setHoverdFunction?: (string: string) => void\n}\n\nconst FluxDocsTooltipContent: FC = ({\n item: func,\n setToolTipPopup,\n setHoverdFunction,\n}) => {\n useEffect(() => {\n setToolTipPopup && setToolTipPopup(true)\n setHoverdFunction && setHoverdFunction(`${func.package}.${func.name}`)\n }, [])\n const argComponent = () => {\n if (func.fluxParameters.length > 0) {\n return func.fluxParameters.map(arg => {\n let param = 'Optional'\n const description = arg.headline.slice(arg.name.length + 1)\n arg.required ? (param = 'Required') : param\n\n const paramClass = classnames('param', {\n isRequired: param === 'Required' ? true : false,\n })\n return (\n
\n {arg.name}:\n ({param})\n
{description}
\n
\n )\n })\n }\n\n return
None
\n }\n\n return (\n
\n \n
\n
\n
Description
\n {func.headline}\n
\n
\n
Arguments
\n
{argComponent()}
\n
\n

\n Still have questions? Check out the{' '}\n \n Flux Docs\n \n .\n

\n
\n
\n
\n )\n}\n\nexport default FluxDocsTooltipContent\n","export const sortFuncs = (a, b) => {\n if (a.package.toLowerCase() === b.package.toLowerCase()) {\n return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1\n } else {\n return a.package.toLowerCase() < b.package.toLowerCase() ? -1 : 1\n }\n}\n","import React, {FC, useCallback, useEffect, useState} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\nimport {DapperScrollbars} from '@influxdata/clockface'\n\n// Components\nimport SearchWidget from 'src/shared/components/search_widget/SearchWidget'\nimport {FluxFunction} from 'src/types/shared'\nimport Fn from 'src/shared/components/FilterList/InjectionOption'\nimport FilterList from 'src/shared/components/FilterList/FilterList'\nimport FluxDocsTooltipContent from 'src/shared/components/functions/perFunction/FluxDocsTooltipContent'\n\n// Actions\nimport {getFluxPackages} from 'src/shared/actions/fluxDocs'\nimport {getAllFluxFunctions} from 'src/shared/selectors/app'\n\n// Utils\nimport {event} from 'src/cloud/utils/reporting'\nimport {getFluxExample} from 'src/shared/utils/fluxExample'\nimport {sortFuncs} from 'src/shared/utils/functions'\nimport {isFlagEnabled} from '../utils/featureFlag'\n\ninterface Props {\n onSelect: (fn: FluxFunction) => void\n}\n\nconst hoveredFunctions = new Set()\n\nconst DynamicFunctionsList: FC = ({onSelect}) => {\n const [eventSearchTerm, setEventSearchTerm] = useState('')\n const [termRecorded, setTermRecorded] = useState('')\n const [tooltipPopup, setTooltipPopup] = useState(false)\n const [hoveredFunction, setHoverdFunction] = useState('')\n const [search, onSearch] = useState('')\n\n const dispatch = useDispatch()\n const fluxFunctions = useSelector(getAllFluxFunctions)\n\n useEffect(() => {\n if (fluxFunctions.length === 0) {\n dispatch(getFluxPackages())\n }\n }, [])\n\n useEffect(() => {\n if (tooltipPopup && eventSearchTerm !== termRecorded) {\n hoveredFunctions.clear()\n event('flux.function.searched', {searchTerm: eventSearchTerm})\n setTermRecorded(eventSearchTerm)\n }\n }, [eventSearchTerm])\n\n useEffect(() => {\n const recordedFunction = hoveredFunctions.has(hoveredFunction)\n if (!recordedFunction) {\n event('flux.function.hover', {function: hoveredFunction})\n }\n hoveredFunctions.add(hoveredFunction)\n }, [hoveredFunction])\n\n const handleSelectItem = useCallback(\n (func: FluxFunction) => {\n onSelect(getFluxExample(func))\n },\n [onSelect]\n )\n\n if (isFlagEnabled('showFnPath')) {\n const _search = search.toLocaleLowerCase()\n const filteredpaths = fluxFunctions\n .filter(fn =>\n `${fn.path} ${fn.package} ${fn.name}`\n .toLocaleLowerCase()\n .includes(_search)\n )\n .reduce((acc, curr) => {\n if (!acc[curr.path]) {\n acc[curr.path] = []\n }\n\n acc[curr.path].push(curr)\n return acc\n }, {})\n const filtereditems = Object.keys(filteredpaths)\n .sort((a, b) =>\n a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase())\n )\n .reduce((acc, curr) => {\n acc.push(\n
\n {curr}\n
\n )\n\n return acc.concat(\n filteredpaths[curr]\n .sort((a, b) =>\n `${a.package} ${a.name}`\n .toLocaleLowerCase()\n .localeCompare(`${b.package} ${b.name}`.toLocaleLowerCase())\n )\n .map(fn => (\n \n `${(fn as FluxFunction).package}.${(fn as FluxFunction).name}`\n }\n key={`${fn.path}-${fn.package}-${fn.name}`}\n option={fn}\n testID={fn.name}\n ToolTipContent={FluxDocsTooltipContent}\n setToolTipPopup={setTooltipPopup}\n setHoverdFunction={setHoverdFunction}\n />\n ))\n )\n }, [])\n\n return (\n
\n
\n \n
\n
\n {filtereditems}\n
\n
\n )\n }\n\n const render = fn => (\n \n `${(fn as FluxFunction).package}.${(fn as FluxFunction).name}`\n }\n key={`${fn.name}_${fn.desc}`}\n option={fn}\n testID={fn.name}\n ToolTipContent={FluxDocsTooltipContent}\n setToolTipPopup={setTooltipPopup}\n setHoverdFunction={setHoverdFunction}\n />\n )\n\n return (\n \n `${(fn as FluxFunction).name} ${(fn as FluxFunction).package}`\n }\n items={fluxFunctions.sort(sortFuncs)}\n renderItem={render}\n setEventSearchTerm={setEventSearchTerm}\n />\n )\n}\n\nexport default DynamicFunctionsList\n","// Libraries\nimport React, {FC} from 'react'\n\n// Component\nimport {DapperScrollbars} from '@influxdata/clockface'\n\n// Types\nimport {FluxToolbarFunction} from 'src/types/shared'\n\ninterface TooltipProps {\n item: FluxToolbarFunction\n}\n\nconst FunctionTooltipContent: FC = ({item: func}) => {\n let argComponent =
None
\n\n if (func.args.length > 0) {\n argComponent = (\n <>\n {func.args.map(a => (\n
\n {a.name}:\n {a.type}\n
{a.desc}
\n
\n ))}\n \n )\n }\n\n return (\n
\n \n
\n
\n
Description
\n {func.desc}\n
\n
\n
Arguments
\n
{argComponent}
\n
\n
\n
Example
\n
{func.example}
\n
\n

\n Still have questions? Check out the{' '}\n \n Flux Docs\n \n .\n

\n
\n
\n
\n )\n}\n\nexport default FunctionTooltipContent\n","import React, {FC, useState, useMemo, useCallback} from 'react'\n\nimport {\n EmptyState,\n ComponentSize,\n DapperScrollbars,\n} from '@influxdata/clockface'\nimport {FLUX_FUNCTIONS} from 'src/shared/constants/fluxFunctions'\nimport {FluxToolbarFunction} from 'src/types/shared'\nimport Fn from 'src/shared/components/FilterList/InjectionOption'\nimport SearchWidget from 'src/shared/components/search_widget/SearchWidget'\nimport FunctionTooltipContent from 'src/shared/components/functions/perFunction/FunctionToolTipContent'\n\ninterface Props {\n onSelect: (fn: FluxToolbarFunction) => void\n}\n\ninterface FilteredFn {\n [key: string]: FluxToolbarFunction[]\n}\n\nconst GroupedFunctionsList: FC = ({onSelect}) => {\n const [search, setSearch] = useState('')\n const updateSearch = useCallback(\n text => {\n setSearch(text)\n },\n [search, setSearch]\n )\n\n const filteredFunctions: FilteredFn = useMemo(\n () =>\n FLUX_FUNCTIONS.filter(fn => {\n return (\n !search.length || fn.name.toLowerCase().includes(search.toLowerCase())\n )\n }).reduce((acc, fn) => {\n if (!acc[fn.category]) {\n acc[fn.category] = [] as FluxToolbarFunction[]\n }\n\n acc[fn.category].push(fn)\n\n return acc\n }, {}),\n [search]\n )\n\n return useMemo(() => {\n let fnComponent\n\n if (!Object.keys(filteredFunctions).length) {\n fnComponent = (\n \n No functions match your search\n \n )\n } else {\n fnComponent = Object.entries(filteredFunctions).map(([category, fns]) => (\n
\n
{category}
\n {fns.map(fn => (\n (fn as FluxToolbarFunction).name}\n key={`${fn.name}_${fn.desc}`}\n option={fn}\n testID={fn.name}\n ToolTipContent={FunctionTooltipContent}\n />\n ))}\n
\n ))\n }\n\n return (\n
\n
\n \n
\n
\n {fnComponent}\n
\n
\n )\n }, [search, onSelect, filteredFunctions, updateSearch])\n}\n\nexport default GroupedFunctionsList\n","// Libraries\nimport {Dispatch} from 'react'\nimport {isEqual} from 'lodash'\n// Actions\nimport {Action as QueryBuilderAction} from 'src/timeMachine/actions/queryBuilder'\nimport {\n loadBuckets,\n reloadTagSelectors,\n} from 'src/timeMachine/actions/queryBuilderThunks'\nimport {saveAndExecuteQueries} from 'src/timeMachine/actions/queries'\nimport {setDashboardTimeRange} from 'src/dashboards/actions/ranges'\n\n// Selectors\nimport {getActiveQuery} from 'src/timeMachine/selectors'\n\n// Utils\nimport {createView} from 'src/views/helpers'\nimport {currentContext} from 'src/shared/selectors/currentContext'\n\n// Types\nimport {TimeMachineState} from 'src/timeMachine/reducers'\nimport {Action as QueryResultsAction} from 'src/timeMachine/actions/queries'\nimport {\n AutoRefresh,\n Axes,\n DecimalPlaces,\n FieldOption,\n StaticLegend,\n TableOptions,\n TimeMachineID,\n TimeMachineTab,\n TimeRange,\n ViewProperties,\n ViewType,\n XYGeom,\n XYViewProperties,\n} from 'src/types'\nimport {Color} from 'src/types/colors'\nimport {HistogramPosition, LinePosition} from '@influxdata/giraffe'\n\nexport type Action =\n | QueryBuilderAction\n | QueryResultsAction\n | SetActiveTimeMachineAction\n | SetActiveTabAction\n | SetNameAction\n | SetAutoRefreshAction\n | SetTypeAction\n | SetActiveQueryText\n | SetIsViewingRawDataAction\n | SetGeomAction\n | SetDecimalPlaces\n | SetBackgroundThresholdColoringAction\n | SetTextThresholdColoringAction\n | SetColors\n | SetYAxisLabel\n | SetYAxisBounds\n | SetAxisPrefix\n | SetAxisSuffix\n | SetYAxisBase\n | SetPrefix\n | SetTickPrefix\n | SetSuffix\n | SetTickSuffix\n | SetActiveQueryIndexAction\n | AddQueryAction\n | RemoveQueryAction\n | ToggleQueryAction\n | EditActiveQueryAsFluxAction\n | EditActiveQueryWithBuilderAction\n | UpdateActiveQueryNameAction\n | SetFieldOptionsAction\n | UpdateFieldOptionAction\n | SetTableOptionsAction\n | SetTimeFormatAction\n | SetXColumnAction\n | SetYColumnAction\n | SetYSeriesColumnsAction\n | SetYLabelColumnsAction\n | SetYLabelColumnSeparatorAction\n | SetBinSizeAction\n | SetColorHexesAction\n | SetFillColumnsAction\n | SetSymbolColumnsAction\n | SetBinCountAction\n | SetHistogramPositionAction\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | SetXDomainAction\n | SetYDomainAction\n | SetXAxisLabelAction\n | SetShadeBelowAction\n | SetHoverDimensionAction\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\ntype ExternalActions =\n | ReturnType\n | ReturnType\n\ninterface SetActiveTimeMachineAction {\n type: 'SET_ACTIVE_TIME_MACHINE'\n payload: {\n activeTimeMachineID: TimeMachineID\n initialState: Partial\n }\n}\n\nexport const setActiveTimeMachine = (\n activeTimeMachineID: TimeMachineID,\n initialState: Partial = {}\n): SetActiveTimeMachineAction => ({\n type: 'SET_ACTIVE_TIME_MACHINE',\n payload: {activeTimeMachineID, initialState},\n})\n\ninterface SetActiveTabAction {\n type: 'SET_ACTIVE_TAB'\n payload: {activeTab: TimeMachineTab}\n}\n\nexport const setActiveTab = (\n activeTab: TimeMachineTab\n): SetActiveTabAction => ({\n type: 'SET_ACTIVE_TAB',\n payload: {activeTab},\n})\n\nexport const toggleVisOptions = () => ({\n type: 'TOGGLE_VIS_OPTIONS' as 'TOGGLE_VIS_OPTIONS',\n})\n\ninterface SetNameAction {\n type: 'SET_VIEW_NAME'\n payload: {name: string}\n}\n\nexport const setName = (name: string): SetNameAction => ({\n type: 'SET_VIEW_NAME',\n payload: {name},\n})\n\nexport const setTimeMachineTimeRange = (timeRange: TimeRange) =>\n ({\n type: 'SET_TIME_MACHINE_TIME_RANGE',\n timeRange,\n } as const)\n\nexport const setTimeRange = (timeRange: TimeRange) => (dispatch, getState) => {\n const state = getState()\n const contextID = currentContext(state)\n const activeQuery = getActiveQuery(state)\n\n if (!isEqual(timeRange, state.ranges[contextID])) {\n dispatch(setDashboardTimeRange(contextID, timeRange))\n dispatch(saveAndExecuteQueries())\n }\n\n if (activeQuery.editMode === 'builder') {\n dispatch(reloadTagSelectors())\n }\n}\n\ninterface SetAutoRefreshAction {\n type: 'SET_AUTO_REFRESH'\n payload: {autoRefresh: AutoRefresh}\n}\n\nexport const setAutoRefresh = (\n autoRefresh: AutoRefresh\n): SetAutoRefreshAction => ({\n type: 'SET_AUTO_REFRESH',\n payload: {autoRefresh},\n})\n\ninterface SetTypeAction {\n type: 'SET_VIEW_TYPE'\n payload: {type: ViewType}\n}\n\nexport const setType = (type: ViewType): SetTypeAction => ({\n type: 'SET_VIEW_TYPE',\n payload: {type},\n})\n\ninterface SetActiveQueryText {\n type: 'SET_ACTIVE_QUERY_TEXT'\n payload: {text: string}\n}\n\nexport const setActiveQueryText = (text: string): SetActiveQueryText => ({\n type: 'SET_ACTIVE_QUERY_TEXT',\n payload: {text},\n})\n\ninterface SetIsViewingRawDataAction {\n type: 'SET_IS_VIEWING_RAW_DATA'\n payload: {isViewingRawData: boolean}\n}\n\nexport const setIsViewingRawData = (\n isViewingRawData: boolean\n): SetIsViewingRawDataAction => ({\n type: 'SET_IS_VIEWING_RAW_DATA',\n payload: {isViewingRawData},\n})\n\ninterface SetGeomAction {\n type: 'SET_GEOM'\n payload: {geom: XYGeom}\n}\n\nexport const setGeom = (geom: XYGeom): SetGeomAction => ({\n type: 'SET_GEOM',\n payload: {geom},\n})\n\ninterface SetYAxisLabel {\n type: 'SET_Y_AXIS_LABEL'\n payload: {yAxisLabel: string}\n}\n\nexport const setYAxisLabel = (yAxisLabel: string): SetYAxisLabel => ({\n type: 'SET_Y_AXIS_LABEL',\n payload: {yAxisLabel},\n})\n\ninterface SetYAxisBounds {\n type: 'SET_Y_AXIS_BOUNDS'\n payload: {bounds: Axes['y']['bounds']}\n}\n\nexport const setYAxisBounds = (\n bounds: Axes['y']['bounds']\n): SetYAxisBounds => ({\n type: 'SET_Y_AXIS_BOUNDS',\n payload: {bounds},\n})\n\ninterface SetAxisPrefix {\n type: 'SET_AXIS_PREFIX'\n payload: {prefix: string; axis: 'x' | 'y'}\n}\n\nexport const setAxisPrefix = (\n prefix: string,\n axis: 'x' | 'y'\n): SetAxisPrefix => ({\n type: 'SET_AXIS_PREFIX',\n payload: {prefix, axis},\n})\n\ninterface SetAxisSuffix {\n type: 'SET_AXIS_SUFFIX'\n payload: {suffix: string; axis: 'x' | 'y'}\n}\n\nexport const setAxisSuffix = (\n suffix: string,\n axis: 'x' | 'y'\n): SetAxisSuffix => ({\n type: 'SET_AXIS_SUFFIX',\n payload: {suffix, axis},\n})\n\ninterface SetYAxisBase {\n type: 'SET_Y_AXIS_BASE'\n payload: {base: string}\n}\n\nexport const setYAxisBase = (base: string): SetYAxisBase => ({\n type: 'SET_Y_AXIS_BASE',\n payload: {base},\n})\n\ninterface SetPrefix {\n type: 'SET_PREFIX'\n payload: {prefix: string}\n}\n\nexport const setPrefix = (prefix: string): SetPrefix => ({\n type: 'SET_PREFIX',\n payload: {prefix},\n})\n\ninterface SetTickPrefix {\n type: 'SET_TICK_PREFIX'\n payload: {tickPrefix: string}\n}\n\nexport const setTickPrefix = (tickPrefix: string): SetTickPrefix => ({\n type: 'SET_TICK_PREFIX',\n payload: {tickPrefix},\n})\n\ninterface SetSuffix {\n type: 'SET_SUFFIX'\n payload: {suffix: string}\n}\n\nexport const setSuffix = (suffix: string): SetSuffix => ({\n type: 'SET_SUFFIX',\n payload: {suffix},\n})\n\ninterface SetTickSuffix {\n type: 'SET_TICK_SUFFIX'\n payload: {tickSuffix: string}\n}\n\nexport const setTickSuffix = (tickSuffix: string): SetTickSuffix => ({\n type: 'SET_TICK_SUFFIX',\n payload: {tickSuffix},\n})\n\ninterface SetColors {\n type: 'SET_COLORS'\n payload: {colors: Color[]}\n}\n\nexport const setColors = (colors: Color[]): SetColors => ({\n type: 'SET_COLORS',\n payload: {colors},\n})\n\ninterface SetDecimalPlaces {\n type: 'SET_DECIMAL_PLACES'\n payload: {decimalPlaces: DecimalPlaces}\n}\n\nexport const setDecimalPlaces = (\n decimalPlaces: DecimalPlaces\n): SetDecimalPlaces => ({\n type: 'SET_DECIMAL_PLACES',\n payload: {decimalPlaces},\n})\n\ninterface SetBackgroundThresholdColoringAction {\n type: 'SET_BACKGROUND_THRESHOLD_COLORING'\n}\n\nexport const setBackgroundThresholdColoring =\n (): SetBackgroundThresholdColoringAction => ({\n type: 'SET_BACKGROUND_THRESHOLD_COLORING',\n })\n\ninterface SetTextThresholdColoringAction {\n type: 'SET_TEXT_THRESHOLD_COLORING'\n}\n\nexport const setTextThresholdColoring = (): SetTextThresholdColoringAction => ({\n type: 'SET_TEXT_THRESHOLD_COLORING',\n})\n\ninterface EditActiveQueryWithBuilderAction {\n type: 'EDIT_ACTIVE_QUERY_WITH_BUILDER'\n}\n\nexport const editActiveQueryWithBuilderSync =\n (): EditActiveQueryWithBuilderAction => ({\n type: 'EDIT_ACTIVE_QUERY_WITH_BUILDER',\n })\n\nexport const editActiveQueryWithBuilder = () => dispatch => {\n dispatch(editActiveQueryWithBuilderSync())\n dispatch(saveAndExecuteQueries())\n}\n\ninterface ResetActiveQueryWithBuilder {\n type: 'RESET_QUERY_AND_EDIT_WITH_BUILDER'\n}\n\nexport const resetActiveQueryWithBuilder = (): ResetActiveQueryWithBuilder => ({\n type: 'RESET_QUERY_AND_EDIT_WITH_BUILDER',\n})\n\nexport const resetActiveQuerySwitchToBuilder = () => dispatch => {\n dispatch(resetActiveQueryWithBuilder())\n dispatch(saveAndExecuteQueries())\n}\n\ninterface EditActiveQueryAsFluxAction {\n type: 'EDIT_ACTIVE_QUERY_AS_FLUX'\n}\n\nexport const editActiveQueryAsFlux = (): EditActiveQueryAsFluxAction => ({\n type: 'EDIT_ACTIVE_QUERY_AS_FLUX',\n})\n\ninterface SetActiveQueryIndexAction {\n type: 'SET_ACTIVE_QUERY_INDEX'\n payload: {activeQueryIndex: number}\n}\n\nexport const setActiveQueryIndexSync = (\n activeQueryIndex: number\n): SetActiveQueryIndexAction => ({\n type: 'SET_ACTIVE_QUERY_INDEX',\n payload: {activeQueryIndex},\n})\n\nexport const setActiveQueryIndex =\n (activeQueryIndex: number) =>\n (dispatch: Dispatch) => {\n dispatch(setActiveQueryIndexSync(activeQueryIndex))\n dispatch(loadBuckets())\n }\n\ninterface AddQueryAction {\n type: 'ADD_QUERY'\n}\n\nexport const addQuerySync = (): AddQueryAction => ({\n type: 'ADD_QUERY',\n})\n\nexport const addQuery =\n () => (dispatch: Dispatch) => {\n dispatch(addQuerySync())\n dispatch(loadBuckets())\n }\n\ninterface RemoveQueryAction {\n type: 'REMOVE_QUERY'\n payload: {queryIndex: number}\n}\n\nexport const removeQuerySync = (queryIndex: number): RemoveQueryAction => ({\n type: 'REMOVE_QUERY',\n payload: {queryIndex},\n})\n\ninterface ToggleQueryAction {\n type: 'TOGGLE_QUERY'\n payload: {queryIndex: number}\n}\n\nexport const toggleQuerySync = (queryIndex: number): ToggleQueryAction => ({\n type: 'TOGGLE_QUERY',\n payload: {queryIndex},\n})\n\nexport const removeQuery =\n (queryIndex: number) => (dispatch: Dispatch) => {\n dispatch(removeQuerySync(queryIndex))\n dispatch(loadBuckets())\n dispatch(saveAndExecuteQueries())\n }\n\nexport const toggleQuery =\n (queryIndex: number) => (dispatch: Dispatch) => {\n dispatch(toggleQuerySync(queryIndex))\n dispatch(saveAndExecuteQueries())\n }\n\ninterface UpdateActiveQueryNameAction {\n type: 'UPDATE_ACTIVE_QUERY_NAME'\n payload: {queryName: string}\n}\n\nexport const updateActiveQueryName = (\n queryName: string\n): UpdateActiveQueryNameAction => ({\n type: 'UPDATE_ACTIVE_QUERY_NAME',\n payload: {queryName},\n})\n\ninterface SetFieldOptionsAction {\n type: 'SET_FIELD_OPTIONS'\n payload: {\n fieldOptions: FieldOption[]\n }\n}\n\nexport const setFieldOptions = (\n fieldOptions: FieldOption[]\n): SetFieldOptionsAction => ({\n type: 'SET_FIELD_OPTIONS',\n payload: {fieldOptions},\n})\n\ninterface UpdateFieldOptionAction {\n type: 'UPDATE_FIELD_OPTION'\n payload: {\n option: FieldOption\n }\n}\n\nexport const updateFieldOption = (\n option: FieldOption\n): UpdateFieldOptionAction => ({\n type: 'UPDATE_FIELD_OPTION',\n payload: {option},\n})\n\ninterface SetTableOptionsAction {\n type: 'SET_TABLE_OPTIONS'\n payload: {\n tableOptions: TableOptions\n }\n}\n\nexport const setTableOptions = (\n tableOptions: TableOptions\n): SetTableOptionsAction => ({\n type: 'SET_TABLE_OPTIONS',\n payload: {tableOptions},\n})\n\ninterface SetTimeFormatAction {\n type: 'SET_TIME_FORMAT'\n payload: {\n timeFormat: string\n }\n}\n\nexport const setTimeFormat = (timeFormat: string): SetTimeFormatAction => ({\n type: 'SET_TIME_FORMAT',\n payload: {timeFormat},\n})\n\ninterface SetXColumnAction {\n type: 'SET_X_COLUMN'\n payload: {xColumn: string}\n}\n\nexport const setXColumn = (xColumn: string): SetXColumnAction => ({\n type: 'SET_X_COLUMN',\n payload: {xColumn},\n})\n\ninterface SetYColumnAction {\n type: 'SET_Y_COLUMN'\n payload: {yColumn: string}\n}\n\nexport const setYColumn = (yColumn: string): SetYColumnAction => ({\n type: 'SET_Y_COLUMN',\n payload: {yColumn},\n})\n\ninterface SetYSeriesColumnsAction {\n type: 'SET_Y_SERIES_COLUMNS'\n payload: {ySeriesColumns: string[]}\n}\n\nexport const setYSeriesColumns = (\n ySeriesColumns: string[]\n): SetYSeriesColumnsAction => ({\n type: 'SET_Y_SERIES_COLUMNS',\n payload: {ySeriesColumns},\n})\n\ninterface SetYLabelColumnsAction {\n type: 'SET_Y_LABEL_COLUMNS'\n payload: {yLabelColumns: string[]}\n}\n\nexport const setYLabelColumns = (\n yLabelColumns: string[]\n): SetYLabelColumnsAction => ({\n type: 'SET_Y_LABEL_COLUMNS',\n payload: {yLabelColumns},\n})\n\ninterface SetYLabelColumnSeparatorAction {\n type: 'SET_Y_LABEL_COLUMN_SEPARATOR'\n payload: {yLabelColumnSeparator: string}\n}\n\nexport const setYLabelColumnSeparator = (\n yLabelColumnSeparator: string\n): SetYLabelColumnSeparatorAction => ({\n type: 'SET_Y_LABEL_COLUMN_SEPARATOR',\n payload: {yLabelColumnSeparator},\n})\n\ninterface SetShadeBelowAction {\n type: 'SET_SHADE_BELOW'\n payload: {shadeBelow}\n}\n\nexport const setShadeBelow = (shadeBelow: boolean): SetShadeBelowAction => ({\n type: 'SET_SHADE_BELOW',\n payload: {shadeBelow},\n})\n\ninterface SetHoverDimensionAction {\n type: 'SET_HOVER_DIMENSION'\n payload: {hoverDimension}\n}\n\nexport const setHoverDimension = (\n hoverDimension: 'auto' | 'x' | 'y' | 'xy'\n): SetHoverDimensionAction => ({\n type: 'SET_HOVER_DIMENSION',\n payload: {hoverDimension},\n})\n\ninterface SetBinSizeAction {\n type: 'SET_BIN_SIZE'\n payload: {binSize: number}\n}\n\nexport const setBinSize = (binSize: number): SetBinSizeAction => ({\n type: 'SET_BIN_SIZE',\n payload: {binSize},\n})\n\ninterface SetColorHexesAction {\n type: 'SET_COLOR_HEXES'\n payload: {colors: string[]}\n}\n\nexport const setColorHexes = (colors: string[]): SetColorHexesAction => ({\n type: 'SET_COLOR_HEXES',\n payload: {colors},\n})\n\ninterface SetFillColumnsAction {\n type: 'SET_FILL_COLUMNS'\n payload: {fillColumns: string[]}\n}\n\nexport const setFillColumns = (\n fillColumns: string[]\n): SetFillColumnsAction => ({\n type: 'SET_FILL_COLUMNS',\n payload: {fillColumns},\n})\n\ninterface SetSymbolColumnsAction {\n type: 'SET_SYMBOL_COLUMNS'\n payload: {symbolColumns: string[]}\n}\n\nexport const setSymbolColumns = (\n symbolColumns: string[]\n): SetSymbolColumnsAction => ({\n type: 'SET_SYMBOL_COLUMNS',\n payload: {symbolColumns},\n})\n\ninterface SetBinCountAction {\n type: 'SET_BIN_COUNT'\n payload: {binCount: number}\n}\n\nexport const setBinCount = (binCount: number): SetBinCountAction => ({\n type: 'SET_BIN_COUNT',\n payload: {binCount},\n})\n\ninterface SetHistogramPositionAction {\n type: 'SET_HISTOGRAM_POSITION'\n payload: {position: HistogramPosition}\n}\n\nexport const setHistogramPosition = (\n position: HistogramPosition\n): SetHistogramPositionAction => ({\n type: 'SET_HISTOGRAM_POSITION',\n payload: {position},\n})\n\nexport const setLinePosition = (position: LinePosition) => ({\n type: 'SET_LINE_POSITION' as 'SET_LINE_POSITION',\n payload: {position},\n})\n\ninterface SetXDomainAction {\n type: 'SET_VIEW_X_DOMAIN'\n payload: {xDomain: [number, number]}\n}\n\nexport const setXDomain = (xDomain: [number, number]): SetXDomainAction => ({\n type: 'SET_VIEW_X_DOMAIN',\n payload: {xDomain},\n})\n\ninterface SetYDomainAction {\n type: 'SET_VIEW_Y_DOMAIN'\n payload: {yDomain: [number, number]}\n}\n\nexport const setYDomain = (yDomain: [number, number]): SetYDomainAction => ({\n type: 'SET_VIEW_Y_DOMAIN',\n payload: {yDomain},\n})\n\ninterface SetXAxisLabelAction {\n type: 'SET_X_AXIS_LABEL'\n payload: {xAxisLabel: string}\n}\n\nexport const setXAxisLabel = (xAxisLabel: string): SetXAxisLabelAction => ({\n type: 'SET_X_AXIS_LABEL',\n payload: {xAxisLabel},\n})\n\nexport const setUpperColumn = (upperColumn: string) => ({\n type: 'SET_UPPER_COLUMN' as 'SET_UPPER_COLUMN',\n payload: {upperColumn},\n})\n\nexport const setMainColumn = (mainColumn: string) => ({\n type: 'SET_MAIN_COLUMN' as 'SET_MAIN_COLUMN',\n payload: {mainColumn},\n})\n\nexport const setLowerColumn = (lowerColumn: string) => ({\n type: 'SET_LOWER_COLUMN' as 'SET_LOWER_COLUMN',\n payload: {lowerColumn},\n})\n\nexport const setLegendOpacity = (legendOpacity: number) => ({\n type: 'SET_LEGEND_OPACITY' as 'SET_LEGEND_OPACITY',\n payload: {legendOpacity},\n})\n\nexport const setLegendOrientationThreshold = (\n legendOrientationThreshold: number\n) => ({\n type: 'SET_LEGEND_ORIENTATION_THRESHOLD' as 'SET_LEGEND_ORIENTATION_THRESHOLD',\n payload: {legendOrientationThreshold},\n})\n\nexport const setLegendColorizeRows = (legendColorizeRows: boolean) => ({\n type: 'SET_LEGEND_COLORIZE_ROWS' as 'SET_LEGEND_COLORIZE_ROWS',\n payload: {legendColorizeRows},\n})\n\nexport const setLegendHide = (legendHide: boolean) => ({\n type: 'SET_LEGEND_HIDE' as 'SET_LEGEND_HIDE',\n payload: {legendHide},\n})\n\nexport const setStaticLegend = (staticLegend: StaticLegend) => ({\n type: 'SET_STATIC_LEGEND' as 'SET_STATIC_LEGEND',\n payload: {staticLegend},\n})\n\nexport const setGenerateXAxisTicks = (generateXAxisTicks: string[]) => ({\n type: 'SET_GENERATE_X_AXIS_TICKS' as 'SET_GENERATE_X_AXIS_TICKS',\n payload: {generateXAxisTicks},\n})\n\nexport const setGenerateYAxisTicks = (generateYAxisTicks: string[]) => ({\n type: 'SET_GENERATE_Y_AXIS_TICKS' as 'SET_GENERATE_Y_AXIS_TICKS',\n payload: {generateYAxisTicks},\n})\n\nexport const setXTotalTicks = (xTotalTicks: number) => ({\n type: 'SET_X_TOTAL_TICKS' as 'SET_X_TOTAL_TICKS',\n payload: {xTotalTicks},\n})\n\nexport const setXTickStart = (xTickStart: number) => ({\n type: 'SET_X_TICK_START' as 'SET_X_TICK_START',\n payload: {xTickStart},\n})\n\nexport const setXTickStep = (xTickStep: number) => ({\n type: 'SET_X_TICK_STEP' as 'SET_X_TICK_STEP',\n payload: {xTickStep},\n})\n\nexport const setYTotalTicks = (yTotalTicks: number) => ({\n type: 'SET_Y_TOTAL_TICKS' as 'SET_Y_TOTAL_TICKS',\n payload: {yTotalTicks},\n})\n\nexport const setYTickStart = (yTickStart: number) => ({\n type: 'SET_Y_TICK_START' as 'SET_Y_TICK_START',\n payload: {yTickStart},\n})\n\nexport const setYTickStep = (yTickStep: number) => ({\n type: 'SET_Y_TICK_STEP' as 'SET_Y_TICK_STEP',\n payload: {yTickStep},\n})\n\nexport const setViewProperties = (properties: ViewProperties) =>\n ({\n type: 'SET_VIEW_PROPERTIES',\n payload: {properties},\n } as const)\n\nexport const loadNewVEO =\n () =>\n (dispatch: Dispatch): void => {\n dispatch(\n setActiveTimeMachine('veo', {\n view: createView('xy'),\n })\n )\n }\n","import {TimeZone, Theme, NavBarState, VersionInfo, FlowsCTA} from 'src/types'\n\nexport enum ActionTypes {\n EnablePresentationMode = 'ENABLE_PRESENTATION_MODE',\n DisablePresentationMode = 'DISABLE_PRESENTATION_MODE',\n SetNavBarState = 'SET_NAV_BAR_STATE',\n SetFluxQueryBuilder = 'SET_FLUX_QUERY_BUILDER',\n SetAutoRefresh = 'SET_AUTOREFRESH',\n SetTimeZone = 'SET_APP_TIME_ZONE',\n SetVersionInfo = 'SET_VERSION_INFO',\n TemplateControlBarVisibilityToggled = 'TemplateControlBarVisibilityToggledAction',\n SetFlowsCTA = 'SET_FLOWS_CTA',\n Noop = 'NOOP',\n SetSubscriptionsCertificateInterest = 'SET_SUB_CERT_INTEREST',\n}\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// ephemeral state action creators\n\nexport const enablePresentationMode = () =>\n ({\n type: ActionTypes.EnablePresentationMode,\n } as const)\n\nexport const disablePresentationMode = () =>\n ({\n type: ActionTypes.DisablePresentationMode,\n } as const)\n\n// persistent state action creators\n\nexport const setTheme = (theme: Theme) => ({type: 'SET_THEME', theme} as const)\n\nexport const setFluxQueryBuilder = (active: boolean) =>\n ({\n type: ActionTypes.SetFluxQueryBuilder,\n active,\n } as const)\n\nexport const setNavBarState = (navBarState: NavBarState) =>\n ({\n type: ActionTypes.SetNavBarState,\n navBarState,\n } as const)\n\nexport const setAutoRefresh = (milliseconds: number) =>\n ({\n type: ActionTypes.SetAutoRefresh,\n payload: {\n milliseconds,\n },\n } as const)\n\nexport const setTimeZone = (timeZone: TimeZone) =>\n ({\n type: ActionTypes.SetTimeZone,\n payload: {timeZone},\n } as const)\n\nexport const setVersionInfo = (versionInfo: VersionInfo) =>\n ({\n type: ActionTypes.SetVersionInfo,\n payload: {versionInfo},\n } as const)\n\nexport const setFlowsCTA = (flowsCTA: FlowsCTA) =>\n ({\n type: ActionTypes.SetFlowsCTA,\n payload: {flowsCTA},\n } as const)\n\nexport const setSubscriptionsCertificateInterest = () =>\n ({\n type: ActionTypes.SetSubscriptionsCertificateInterest,\n } as const)\n","export type Action = ReturnType\n\nexport const SET_IS_AUTO_FUNCTION = 'SET_IS_AUTO_FUNCTION'\n\nexport const setIsAutoFunction = (bool: boolean) =>\n ({\n type: SET_IS_AUTO_FUNCTION,\n isAutoFunction: bool,\n } as const)\n","import {get} from 'lodash'\n\n// Constants\nimport {\n telegrafPluginsInfo,\n pluginsByBundle,\n} from 'src/dataLoaders/constants/pluginConfigs'\n\n// Types\nimport {\n BundleName,\n ConfigFields,\n Plugin,\n TelegrafPlugin,\n TelegrafPluginName,\n} from 'src/types/dataLoaders'\n\nexport const getConfigFields = (\n pluginName: TelegrafPluginName\n): ConfigFields => {\n return telegrafPluginsInfo[pluginName].fields\n}\n\nexport const updateConfigFields = (\n plugin: T,\n fieldName: string,\n value: string[] | string\n): T => {\n return Object.assign({}, plugin, {\n config: Object.assign({}, get(plugin, 'config', {}), {\n [fieldName]: value,\n }),\n })\n}\n\nexport const createNewPlugin = (plugin: TelegrafPlugin): Plugin => {\n if (telegrafPluginsInfo[plugin?.name]) {\n return telegrafPluginsInfo[plugin.name].defaults\n }\n const {\n plugin: {type: pluginType} = {\n type: 'input',\n },\n } = plugin\n return {\n name: plugin.name ? plugin.name : 'plugin-input',\n type: pluginType,\n }\n}\n\nexport const isPluginUniqueToBundle = (\n telegrafPlugin: TelegrafPluginName,\n bundle: BundleName,\n bundles: BundleName[]\n): boolean => {\n return bundles.reduce((acc: boolean, b) => {\n if (b === bundle) {\n return acc\n }\n\n pluginsByBundle[b].forEach(p => {\n if (p === telegrafPlugin) {\n acc = false\n }\n })\n\n return acc\n }, true)\n}\n\nexport const isPluginInBundle = (\n telegrafPlugin: TelegrafPluginName,\n bundle: BundleName\n) => {\n return !!pluginsByBundle[bundle].find(p => p === telegrafPlugin)\n}\n","// Types\nimport {\n VariableEntities,\n VariableArgumentType,\n RemoteDataState,\n QueryArguments,\n MapArguments,\n CSVArguments,\n} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nexport const SET_VARIABLES = 'SET_VARIABLES'\nexport const SET_VARIABLE = 'SET_VARIABLE'\nexport const REMOVE_VARIABLE = 'REMOVE_VARIABLE'\nexport const MOVE_VARIABLE = 'MOVE_VARIABLE'\nexport const SELECT_VARIABLE_VALUE = 'SELECT_VARIABLE_VALUE'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// R is the type of the value of the \"result\" key in normalizr's normalization\ntype VariablesSchema = NormalizedSchema<\n VariableEntities,\n R\n>\n\nexport const setVariables = (\n status: RemoteDataState,\n schema?: VariablesSchema\n) =>\n ({\n type: SET_VARIABLES,\n status,\n schema,\n } as const)\n\nexport const setVariable = (\n id: string,\n status: RemoteDataState,\n schema?: VariablesSchema\n) =>\n ({\n type: SET_VARIABLE,\n id,\n status,\n schema,\n } as const)\n\nexport const removeVariable = (id: string) =>\n ({\n type: REMOVE_VARIABLE,\n id,\n } as const)\n\nexport const moveVariable = (contextID: string, newVariableOrder: string[]) =>\n ({\n type: MOVE_VARIABLE,\n contextID,\n newVariableOrder,\n } as const)\n\nexport const selectValue = (\n contextID: string,\n variableID: string,\n selectedValue: string\n) =>\n ({\n type: SELECT_VARIABLE_VALUE,\n contextID,\n variableID,\n selectedValue,\n } as const)\n\n// Variable Editor Action Creators\nexport type EditorAction =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const CLEAR_VARIABLE_EDITOR = 'CLEAR_VARIABLE_EDITOR'\nexport const CHANGE_VARIABLE_EDITOR_TYPE = 'CHANCE_VARIABLE_EDITOR_TYPE'\nexport const UPDATE_VARIABLE_EDITOR_NAME = 'UPDATE_VARIABLE_EDITOR_NAME'\nexport const UPDATE_VARIABLE_EDITOR_QUERY = 'UPDATE_VARIABLE_EDITOR_QUERY'\nexport const UPDATE_VARIABLE_EDITOR_MAP = 'UPDATE_VARIABLE_EDITOR_MAP'\nexport const UPDATE_VARIABLE_EDITOR_CONSTANT = 'UPDATE_VARIABLE_EDITOR_CONSTANT'\n\nexport const clearEditor = () =>\n ({\n type: CLEAR_VARIABLE_EDITOR,\n } as const)\n\nexport const updateType = (editorType: VariableArgumentType) =>\n ({\n type: CHANGE_VARIABLE_EDITOR_TYPE,\n editorType,\n } as const)\n\nexport const updateName = (name: string) =>\n ({\n type: UPDATE_VARIABLE_EDITOR_NAME,\n name,\n } as const)\n\nexport const updateQuery = (arg: QueryArguments) =>\n ({\n type: UPDATE_VARIABLE_EDITOR_QUERY,\n payload: arg,\n } as const)\n\nexport const updateMap = (arg: MapArguments) =>\n ({\n type: UPDATE_VARIABLE_EDITOR_MAP,\n payload: arg,\n } as const)\n\nexport const updateConstant = (arg: CSVArguments) =>\n ({\n type: UPDATE_VARIABLE_EDITOR_CONSTANT,\n payload: arg,\n } as const)\n","// Types\nimport {RemoteDataState, BucketEntities} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nexport const SET_BUCKETS = 'SET_BUCKETS'\nexport const ADD_BUCKET = 'ADD_BUCKET'\nexport const EDIT_BUCKET = 'EDIT_BUCKET'\nexport const REMOVE_BUCKET = 'REMOVE_BUCKET'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const setBuckets = (\n status: RemoteDataState,\n schema?: NormalizedSchema\n) =>\n ({\n type: SET_BUCKETS,\n status,\n schema,\n } as const)\n\nexport const addBucket = (schema: NormalizedSchema) =>\n ({\n type: ADD_BUCKET,\n schema,\n } as const)\n\nexport const editBucket = (schema: NormalizedSchema) =>\n ({\n type: EDIT_BUCKET,\n schema,\n } as const)\n\nexport const removeBucket = (id: string) =>\n ({\n type: REMOVE_BUCKET,\n id,\n } as const)\n","import {sample} from 'lodash'\nimport {Label, RemoteDataState, GenLabel} from 'src/types'\n\nimport {HEX_CODE_CHAR_LENGTH, PRESET_LABEL_COLORS} from 'src/labels/constants/'\n\nexport const randomPresetColor = () =>\n sample(PRESET_LABEL_COLORS.slice(1)).colorHex\n\n// TODO: Accept a list of label objects instead of strings\n// Will have to wait until label types are standardized in the UI\nexport const validateLabelUniqueness = (\n labelNames: string[],\n name: string\n): string | null => {\n if (typeof name !== 'string') {\n return null\n }\n\n if (name.trim() === '') {\n return 'Label name is required'\n }\n\n const isNameUnique = !labelNames.find(\n labelName => labelName.toLowerCase() === name.toLowerCase()\n )\n\n if (!isNameUnique) {\n return 'There is already a label with that name'\n }\n\n return null\n}\n\nexport const validateHexCode = (colorHex: string): string | null => {\n const isValidLength = colorHex.length === HEX_CODE_CHAR_LENGTH\n const beginsWithHash = colorHex.substring(0, 1) === '#'\n const containsValidCharacters = /^([0-9A-F]*)$/i.test(colorHex.substring(1))\n\n const errorMessage = []\n\n if (!beginsWithHash) {\n errorMessage.push('Hexcodes must begin with #')\n }\n\n if (!isValidLength) {\n if (errorMessage.length) {\n errorMessage.push(`and must be ${HEX_CODE_CHAR_LENGTH} characters`)\n } else {\n errorMessage.push(`Hexcodes must be ${HEX_CODE_CHAR_LENGTH} characters`)\n }\n }\n\n if (!containsValidCharacters) {\n if (errorMessage.length) {\n errorMessage.push(`and must must contain only 0-9,A-F characters`)\n } else {\n errorMessage.push(`Hexcodes must contain only 0-9,A-F characters`)\n }\n }\n\n if (!errorMessage.length) {\n return null\n }\n\n return errorMessage.join(', ')\n}\n\nconst DEFAULT_LABEL_COLOR = '#326BBA'\n\nexport const addLabelDefaults = (l: GenLabel): Label => {\n const out = {\n ...l,\n status: RemoteDataState.Done,\n properties: {\n ...l.properties,\n // add default color hex if missing\n color: (l.properties || {}).color || DEFAULT_LABEL_COLOR,\n description: (l.properties || {}).description || '',\n },\n }\n\n return out\n}\n","/**\n * is the string a valid UTC time without any time zone information?\n * ie: \"2021-07-17T14:00:00.000Z\" is valid\n * if it has any timezone offset, then it is not a valid UTC time string\n *\n * @param formattedTimeStr\n */\nfunction isUtcTime(formattedTimeStr) {\n const regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z$/\n return regex.test(formattedTimeStr)\n}\n\n/** is the time already in utc format? if so it does not need converting. */\nexport const timesNeedConverting = newTimeRange => {\n // if the time range is *already* utc, does not need converting. check just the first part, as\n // they will be formatted the same\n return !isUtcTime(newTimeRange.lower)\n}\n\n// takes in Date object and adds a duration to it.\n// To add 1 hour, value = 1, unit = 'h'\n// similarly, to add a minute. value = 1, unit = 'm'\nexport function addDurationToDate(\n input: Date,\n duration: number,\n unit?: string\n): Date {\n const result = new Date(input)\n\n switch (unit) {\n case 'm': {\n result.setMinutes(input.getMinutes() + duration)\n return result\n }\n case 'd': {\n result.setDate(input.getDate() + duration)\n return result\n }\n default: {\n result.setHours(input.getHours() + duration)\n return result\n }\n }\n}\n\n// checks whether the passed date is ISO format\nexport function isISODate(dateString: string): boolean {\n try {\n const date = new Date(dateString)\n return date.toISOString() === dateString\n } catch (error) {\n return false\n }\n}\n\nexport const convertStringToEpoch = (date: string): number => {\n const convertedDate = new Date(date)\n if (convertedDate.toDateString() === 'Invalid Date') {\n return NaN\n }\n return convertedDate.getTime()\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\nimport {labelSchema} from './labels'\n\n/* Tasks */\n\n// Defines the schema for the tasks resource\nexport const taskSchema = new schema.Entity(ResourceType.Tasks, {\n labels: [labelSchema],\n})\n\nexport const arrayOfTasks = [taskSchema]\n","import React, {FC} from 'react'\nimport {Dropdown, Icon, IconFont, ComponentColor} from '@influxdata/clockface'\nimport {Secret} from 'src/types'\n\ntype OwnProps = {\n selected?: string\n secrets: Secret[]\n onSelect: (v: any) => void\n onCreate: (f: Function) => void\n testID?: string\n}\nconst SecretsDropdown: FC = ({\n selected,\n secrets,\n onSelect,\n onCreate,\n testID = 'secrets',\n}) => {\n return (\n (\n \n {selected !== '' ? selected : 'Choose Secret'}\n \n )}\n menu={onCollapse => (\n \n onCreate(onSelect)}\n >\n \n Create Secret\n \n {secrets.map(s => (\n \n {s.id}\n \n ))}\n \n )}\n />\n )\n}\n\nexport default SecretsDropdown\n","// Libraries\nimport React, {ChangeEvent, FC, useState} from 'react'\n\n// Utils\nimport {convertUserInputToNumOrNaN} from 'src/shared/utils/convertUserInput'\n\n// Components\nimport {\n ButtonShape,\n Columns,\n Form,\n Grid,\n SelectGroup,\n} from '@influxdata/clockface'\nimport {\n OrientationToggle,\n OpacitySlider,\n ColorizeRowsToggle,\n} from 'src/visualization/components/internal/LegendOptions'\n\n// Types\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {\n BandViewProperties,\n XYViewProperties,\n LinePlusSingleStatProperties,\n HeatmapViewProperties,\n HistogramViewProperties,\n MosaicViewProperties,\n ScatterViewProperties,\n} from 'src/types'\n\n// Constants\nimport {\n LEGEND_COLORIZE_ROWS_DEFAULT,\n LEGEND_HIDE_DEFAULT,\n LEGEND_OPACITY_DEFAULT,\n LEGEND_OPACITY_MAXIMUM,\n LEGEND_OPACITY_MINIMUM,\n LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL,\n LEGEND_ORIENTATION_THRESHOLD_VERTICAL,\n LegendDisplayStatus,\n} from 'src/visualization/constants'\n\n// Metrics\nimport {event} from 'src/cloud/utils/reporting'\n\n// Styles\nimport 'src/visualization/components/internal/LegendOptions.scss'\n\ninterface HoverLegendToggleProps {\n properties:\n | BandViewProperties\n | XYViewProperties\n | LinePlusSingleStatProperties\n handlers: {\n [handle: string]: (arg?: any) => void\n }\n}\n\ninterface HoverLegendProps extends VisualizationOptionProps {\n properties:\n | BandViewProperties\n | XYViewProperties\n | LinePlusSingleStatProperties\n | HeatmapViewProperties\n | HistogramViewProperties\n | MosaicViewProperties\n | ScatterViewProperties\n}\n\nconst eventPrefix = 'visualization.customize.hoverLegend'\n\nconst HoverLegendToggle: FC = ({\n properties,\n handlers,\n}) => {\n const {\n legendColorizeRows = LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity = LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold = LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n legendHide = LEGEND_HIDE_DEFAULT,\n } = properties\n const {\n handleSetHoverLegendHide,\n handleSetOrientation,\n handleSetOpacity,\n handleSetColorization,\n } = handlers\n\n const showLegend = !legendHide\n const [showOptions, setShowOptions] = useState(showLegend)\n\n const handleChooseHoverLegend = (value: string) => {\n setShowOptions(value === LegendDisplayStatus.SHOW)\n handleSetHoverLegendHide(value === LegendDisplayStatus.HIDE)\n }\n\n return (\n \n \n \n \n \n \n Hide\n \n \n Show\n \n \n \n \n {showOptions && (\n \n \n \n \n \n \n \n )}\n \n \n )\n}\n\nconst HoverLegend: FC = ({properties, update}) => {\n const {\n legendColorizeRows = LEGEND_COLORIZE_ROWS_DEFAULT,\n legendOpacity = LEGEND_OPACITY_DEFAULT,\n legendOrientationThreshold = LEGEND_ORIENTATION_THRESHOLD_DEFAULT,\n } = properties\n\n const handleSetHoverLegendHide = (legendHide: boolean): void => {\n update({\n legendHide,\n })\n const metricValue = legendHide\n ? LegendDisplayStatus.HIDE\n : LegendDisplayStatus.SHOW\n event(`${eventPrefix}.${metricValue}`, {\n type: properties.type,\n })\n }\n\n const handleSetOrientation = (threshold: number): void => {\n let validThreshold: number\n if (\n typeof threshold !== 'number' ||\n threshold !== threshold ||\n threshold > 0\n ) {\n validThreshold = LEGEND_ORIENTATION_THRESHOLD_HORIZONTAL\n } else {\n validThreshold = LEGEND_ORIENTATION_THRESHOLD_VERTICAL\n }\n update({\n legendOrientationThreshold: validThreshold,\n })\n // eventing is done by because\n // UI's definition of orientation is either horizontal or vertical\n // which is less intricate than Giraffe's\n }\n\n const handleSetOpacity = (e: ChangeEvent): void => {\n const value = convertUserInputToNumOrNaN(e)\n\n if (isNaN(value) || value < LEGEND_OPACITY_MINIMUM) {\n update({\n legendOpacity: LEGEND_OPACITY_MAXIMUM,\n })\n event(`${eventPrefix}.opacity`, {\n type: properties.type,\n opacity: LEGEND_OPACITY_MAXIMUM,\n })\n } else {\n update({\n legendOpacity: value,\n })\n event(`${eventPrefix}.opacity`, {\n type: properties.type,\n opacity: value,\n })\n }\n }\n\n const handleSetColorization = (): void => {\n update({\n legendColorizeRows: !legendColorizeRows,\n })\n event(`${eventPrefix}.colorizeRows.${!legendColorizeRows}`, {\n type: properties.type,\n })\n }\n\n return properties.type === 'xy' ||\n properties.type === 'line-plus-single-stat' ||\n properties.type === 'band' ? (\n \n ) : (\n <>\n \n \n \n \n )\n}\n\nexport default HoverLegend\n","import {useMemo} from 'react'\nimport {\n LEGEND_OPACITY_DEFAULT,\n LEGEND_OPACITY_MINIMUM,\n} from 'src/visualization/constants'\n\nexport const useLegendOpacity = (legendOpacity: number) =>\n useMemo(() => {\n if (\n legendOpacity < LEGEND_OPACITY_MINIMUM ||\n legendOpacity !== legendOpacity\n ) {\n return LEGEND_OPACITY_DEFAULT\n }\n return legendOpacity\n }, [legendOpacity])\n","// Libraries\nimport {NumericColumnData} from '@influxdata/giraffe'\nimport {useMemo} from 'react'\n\n// Utils\nimport {parseDuration} from 'src/shared/utils/duration'\nimport {useOneWayState} from 'src/shared/utils/useOneWayState'\nimport {extent} from 'src/shared/utils/vis'\nimport {flatMap} from 'lodash'\n\n// Types\nimport {Threshold, DurationTimeRange} from 'src/types'\n\nconst POINTS_PER_CHECK_PLOT = 100\n\n/*\n Given the duration in a check's `every` field, return a `TimeRange` suitable\n for visualizing the input data to the check.\n\n For example, suppose a check has an `every` value of `1m`. Then the check is\n run once per minute, and the input data to the `check` for each run is a\n single value aggregated from the last `1m`. To display a visualization of the\n check data over time, we want to show a series of the values aggregated for\n each minute. So to display a plot with say, 300 points, we need to query a\n time range of the last 300 minutes.\n*/\nexport const getCheckVisTimeRange = (\n durationStr: string\n): DurationTimeRange => {\n const durationMultiple = parseDuration(durationStr)\n .map(({magnitude, unit}) => `${magnitude * POINTS_PER_CHECK_PLOT}${unit}`)\n .join('')\n\n const lower = `now() - ${durationMultiple}`\n\n return {upper: null, lower, type: 'duration'}\n}\n\n/*\n Obtain the y domain settings for a threshold check plot.\n\n The y domain for a threshold check plot should be large enough to show every\n threshold value in addition to every y value in the plot.\n*/\nexport const useCheckYDomain = (\n data: NumericColumnData,\n thresholds: Threshold[]\n) => {\n const dataDomain = useMemo(() => extent(data as number[]), [data])\n\n const initialDomain: number[] = useMemo(() => {\n const extrema: number[] = flatMap(thresholds || [], (t: any) => [\n t.value,\n t.min,\n t.max,\n ])\n .filter(v => v !== undefined && v !== null)\n .concat(dataDomain)\n\n return extent(extrema)\n }, [dataDomain, thresholds])\n\n return initialDomain\n}\n\n// Calls the above method, but allows for the setting of state one way\nexport const useCheckYDomainWithState = (\n data: NumericColumnData,\n thresholds: Threshold[]\n) => {\n const initialDomain = useCheckYDomain(data, thresholds)\n const [domain, setDomain] = useOneWayState(initialDomain)\n const resetDomain = () => setDomain(initialDomain)\n\n return [domain, setDomain, resetDomain]\n}\n","import {useState, useEffect} from 'react'\n\nexport const LOAD_MORE_LIMIT_INITIAL = 8\nexport const LOAD_MORE_LIMIT = 25\nexport const IMPORT_REGEXP = 'import \"regexp\"\\n'\nexport const IMPORT_STRINGS = 'import \"strings\"\\n'\nexport const IMPORT_INFLUX_SCHEMA = 'import \"influxdata/influxdb/schema\"\\n'\n\n// Sample data always has bucket id. Here is the code for sample bucket list\n// Src/shared/contexts/buckets.tsx\nexport const SAMPLE_DATA_SET = (bucketID: string) =>\n `import \"influxdata/influxdb/sample\"\\nsample.data(set: \"${bucketID}\")`\n\nexport const FROM_BUCKET = (bucketName: string) =>\n `from(bucket: \"${bucketName}\")`\n\nexport const SEARCH_STRING = (searchTerm: string): string =>\n `|> filter(fn: (r) => r._value =~ regexp.compile(v: \"(?i:\" + regexp.quoteMeta(v: \"${searchTerm}\") + \")\"))`\n\nexport const useSessionStorage = (keyName: string, defaultValue: any) => {\n const [storedValue, setStoredValue] = useState(() => {\n try {\n const value = window.sessionStorage.getItem(keyName)\n\n if (value) {\n return JSON.parse(value)\n } else {\n window.sessionStorage.setItem(keyName, JSON.stringify(defaultValue))\n return defaultValue\n }\n } catch (err) {\n return defaultValue\n }\n })\n\n const setValue = (newValue: any) => {\n try {\n window.sessionStorage.setItem(keyName, JSON.stringify(newValue))\n window.dispatchEvent(\n new CustomEvent('same.storage', {\n detail: {key: keyName, oldValue: storedValue, newValue},\n })\n )\n } catch (err) {}\n setStoredValue(newValue)\n }\n\n // multiple implementations of the same provider, though they share the same state\n // in window.sessionStorage, will fall out of sync as their setStoredValue\n // functions dont know about each other. there's a 'storage' event on window built\n // to mitigate that issue, but it's only fired across tabs, which session storage\n // doesn't even operate across. So here we're generating a custom event to keep\n // all inter-tab invokations of the session storage hook in sync.\n useEffect(() => {\n const listen = (evt: CustomEvent) => {\n if (!evt.detail.key || evt.detail.key !== keyName) {\n return\n }\n\n setStoredValue(evt.detail.newValue)\n }\n\n window.addEventListener('same.storage', listen)\n\n return () => {\n window.removeEventListener('same.storage', listen)\n }\n }, [])\n\n return [storedValue, setValue]\n}\n","// Types\nimport {AppState, View, ResourceType, Dashboard} from 'src/types'\n\n// Selectors\nimport {getByID} from 'src/resources/selectors'\nimport {DEFAULT_TIME_FORMAT} from 'src/utils/datetime/constants'\n\nexport const getViewsForDashboard = (\n state: AppState,\n dashboardID: string\n): View[] => {\n const dashboard = getByID(\n state,\n ResourceType.Dashboards,\n dashboardID\n )\n\n const cellIDs = new Set(dashboard.cells.map(cellID => cellID))\n\n const views = Object.values(state.resources.views.byID).filter(\n view => view && cellIDs.has(view.cellID)\n )\n\n return views\n}\n\nexport const getTimeFormatForView = (\n state: AppState,\n viewID: string\n): string => {\n const view = getByID(state, ResourceType.Views, viewID)\n\n // some types in the ViewProperties union do not have the timeFormat in view.properties (ex. GaugeViewProperties)\n // hence typescript complains, and the following complicated if-statement.\n if (\n view.properties &&\n 'timeFormat' in view.properties &&\n view.properties.timeFormat !== ''\n ) {\n return view.properties.timeFormat\n }\n\n return DEFAULT_TIME_FORMAT\n}\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Token {\n token?: string\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function(\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function(\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function(\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function(\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetUiproxyMapTokenParams {}\n\ntype GetUiproxyMapTokenResult =\n | GetUiproxyMapTokenOKResult\n | GetUiproxyMapTokenUnauthorizedResult\n | GetUiproxyMapTokenInternalServerErrorResult\n | GetUiproxyMapTokenDefaultResult\n\ninterface GetUiproxyMapTokenOKResult {\n status: 200\n headers: Headers\n data: Token\n}\n\ninterface GetUiproxyMapTokenUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetUiproxyMapTokenInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetUiproxyMapTokenDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getUiproxyMapToken = (\n params: GetUiproxyMapTokenParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2private/uiproxy/mapToken', params, options) as Promise<\n GetUiproxyMapTokenResult\n >\n\nexport interface PostUiproxySfdcSupportParams {\n data: {\n description?: string\n email?: string\n severity?: string\n subject?: string\n }\n}\n\ntype PostUiproxySfdcSupportResult =\n | PostUiproxySfdcSupportNoContentResult\n | PostUiproxySfdcSupportUnauthorizedResult\n | PostUiproxySfdcSupportInternalServerErrorResult\n\ninterface PostUiproxySfdcSupportNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostUiproxySfdcSupportUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostUiproxySfdcSupportInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postUiproxySfdcSupport = (\n params: PostUiproxySfdcSupportParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/uiproxy/sfdc-support',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n","import {TypeRegistration} from 'src/types/flows'\n\n// Constants\nimport {DOCS_URL_VERSION} from 'src/shared/constants/fluxFunctions'\n\nexport interface TypeLookup {\n [key: string]: TypeRegistration\n}\n\nexport const UNPROCESSED_PANEL_TEXT =\n 'This cell will display results from the previous cell after selecting Run.'\n\nexport const PIPE_DEFINITIONS: TypeLookup = {}\nexport const NOTEBOOKS_DOCUMENTATION_LINK = `https://docs.influxdata.com/influxdb/${DOCS_URL_VERSION}/notebooks/create-notebook/`\n\nexport {\n PROJECT_NAME,\n DEFAULT_PROJECT_NAME,\n PROJECT_NAME_SHORT,\n PROJECT_NAME_PLURAL,\n} from 'src/flows/constants'\n\n// NOTE: this loads in all the modules under the current directory\n// to make it easier to add new types\nconst context = require.context(\n './pipes',\n true,\n /^\\.\\/([^\\/])+\\/index\\.(ts|tsx)$/\n)\ncontext.keys().forEach(key => {\n const module = context(key)\n module.default((definition: TypeRegistration) => {\n if (PIPE_DEFINITIONS.hasOwnProperty(definition.type)) {\n throw new Error(\n `Pipe of type [${definition.type}] has already been registered`\n )\n }\n\n PIPE_DEFINITIONS[definition.type] = {\n ...definition,\n }\n })\n})\n","// Libraries\nimport React, {FC, useRef, useState} from 'react'\n\n// Components\nimport {\n Button,\n ComponentSize,\n ComponentColor,\n IconFont,\n Popover,\n PopoverPosition,\n PopoverInteraction,\n Appearance,\n} from '@influxdata/clockface'\nimport CopyToClipboard from 'src/shared/components/CopyToClipboard'\n\ninterface Props {\n message: string\n testID?: string\n}\n\nconst EmptyGraphError: FC = ({message, testID}) => {\n const [didCopy, setDidCopy] = useState(false)\n\n const buttonText = didCopy ? 'Copied!' : 'Copy'\n const buttonColor = didCopy ? ComponentColor.Success : ComponentColor.Default\n\n const onClick = () => {\n setDidCopy(true)\n setTimeout(() => setDidCopy(false), 2000)\n }\n\n const trigger = useRef(null)\n\n return (\n
\n
\n \n (\n
\n              \n                \n              \n              {message}\n            
\n )}\n />\n
\n
\n )\n}\n\nexport default EmptyGraphError\n","// Libraries\nimport React, {useState, FunctionComponent} from 'react'\n\n// Components\nimport {\n Button,\n ComponentSize,\n ComponentColor,\n Icon,\n IconFont,\n DapperScrollbars,\n} from '@influxdata/clockface'\nimport CopyToClipboard from 'src/shared/components/CopyToClipboard'\n\ninterface Props {\n message: string\n testID?: string\n}\n\nconst EmptyGraphError: FunctionComponent = ({message, testID}) => {\n const [didCopy, setDidCopy] = useState(false)\n\n const buttonText = didCopy ? 'Copied!' : 'Copy'\n const buttonColor = didCopy ? ComponentColor.Success : ComponentColor.Default\n\n const onClick = () => {\n setDidCopy(true)\n setTimeout(() => setDidCopy(false), 2000)\n }\n\n return (\n
\n
\n \n
\n            \n             {message}\n          
\n
\n \n \n \n
\n
\n )\n}\n\nexport default EmptyGraphError\n","import {sample} from 'lodash'\n\nconst emptyFunny = [\n 'Looks like you don’t have any queries. Be a lot cooler if you did!',\n 'Create a query. Go on!',\n 'Create a query. Have fun!',\n]\n\nexport const emptyGraphCopy = sample(emptyFunny)\n","// Libraries\nimport React, {PureComponent} from 'react'\n\n// Components\nimport EmptyGraphMessage from 'src/shared/components/EmptyGraphMessage'\nimport EmptyGraphErrorTooltip from 'src/shared/components/EmptyGraphErrorTooltip'\nimport EmptyGraphError from 'src/shared/components/EmptyGraphError'\nimport ScrollableMarkdown from 'src/shared/components/views/ScrollableMarkdown'\n\n// Constants\nimport {emptyGraphCopy} from 'src/shared/copy/cell'\n\n// Types\nimport {RemoteDataState} from 'src/types'\nimport {DashboardQuery} from 'src/types'\n\nexport enum ErrorFormat {\n Tooltip = 'tooltip',\n Scroll = 'scroll',\n}\n\ninterface Props {\n errorMessage?: string\n errorFormat: ErrorFormat\n isInitialFetch?: boolean\n loading: RemoteDataState\n hasResults: boolean\n queries?: DashboardQuery[]\n fallbackNote?: string\n}\n\nexport default class EmptyQueryView extends PureComponent {\n public render() {\n const {\n errorMessage,\n isInitialFetch,\n loading,\n queries,\n fallbackNote,\n hasResults,\n errorFormat,\n } = this.props\n\n if (\n loading === RemoteDataState.NotStarted ||\n (queries && !queries.length)\n ) {\n return (\n \n )\n }\n\n if (errorMessage) {\n if (errorFormat === ErrorFormat.Tooltip) {\n return (\n \n )\n }\n\n if (errorFormat === ErrorFormat.Scroll) {\n return (\n \n )\n }\n }\n\n if (\n (isInitialFetch || !hasResults) &&\n loading === RemoteDataState.Loading\n ) {\n return \n }\n\n if (!hasResults && fallbackNote) {\n return \n }\n\n if (!hasResults) {\n return (\n \n )\n }\n\n return this.props.children\n }\n}\n","import {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {track} from 'rudder-sdk-js'\nimport {reportErrorThroughHoneyBadger} from 'src/shared/utils/errors'\nimport {CLOUD} from 'src/shared/constants'\n\nexport interface Point {\n measurement: string\n fields: PointFields\n tags: PointTags\n timestamp?: number\n}\n\nexport interface PointTags {\n [key: string]: number | string\n}\n\nexport interface PointFields {\n [key: string]: number | string\n}\n\nexport interface PointsBatch {\n points: Array\n timestamp?: number\n campaign?: object\n}\n\nexport const reportPoints = (batch: PointsBatch) => {\n if (CLOUD && isFlagEnabled('rudderstackReporting')) {\n try {\n batch.points.forEach(point => {\n track(\n point.measurement,\n point.fields,\n asRudderOptions(point.tags, batch.campaign)\n )\n })\n } catch (error) {\n reportErrorThroughHoneyBadger(error, {\n name: 'rudderstack event reporting',\n })\n }\n }\n if (isFlagEnabled('appMetrics')) {\n try {\n const url = '/api/v2/app-metrics'\n return fetch(url, {\n method: 'POST',\n body: JSON.stringify(batch),\n headers: {\n 'Content-Type': 'application/json',\n },\n credentials: 'include',\n })\n } catch (error) {\n // don't want reporting errors to effect user experience\n }\n }\n}\n\nconst asRudderOptions = (tags: PointTags, campaign: object) => {\n if (Object.keys(campaign).length) {\n // converts tags to generic object so we can put a campaign object as value later\n const options = {}\n for (const key in tags) {\n const value = tags[key]\n if (key !== 'context') {\n options[key] = value\n } else if (typeof value !== 'object') {\n // 'context' is reserved options key and its value must be an object\n // (see processOptionsParam function in rudder-sdk-js/index.js line #20460)\n // so just put the value under different key ie. 'appContext'\n // (see event tracking call in eg. src/shared/apis/queryCache.ts#L116)\n options['appContext'] = value\n } else {\n options[key] = value\n }\n }\n // campaign info is in context object (which is merged in processOptionsParam function in rudder-sdk-js/index.js)\n let context = options['context']\n if (context === undefined) {\n context = {}\n options['context'] = context\n }\n context['campaign'] = campaign\n return options\n }\n return tags\n}\n","import {useState, useEffect} from 'react'\nimport {isEmpty} from 'lodash'\nimport amplitude from 'amplitude-js'\n\nimport {\n reportPoints as reportPointsAPI,\n Point,\n PointTags,\n PointFields,\n} from 'src/cloud/apis/reporting'\n\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {CLOUD, GIT_SHA, AMPLITUDE_KEY} from 'src/shared/constants'\nexport {Point, PointTags, PointFields} from 'src/cloud/apis/reporting'\n\nlet reportingTags: KeyValue = {}\nlet reportingPoints = []\nlet reportDecayTimeout = null\nlet reportMaxTimeout = null\nlet campaignInfo = {}\n\nconst REPORT_DECAY = 500 // number of miliseconds to wait after last event before sending\nconst REPORT_MAX_WAIT = 5000 // max number of miliseconds to wait between sends\nconst REPORT_MAX_LENGTH = 300 // max number of events to queue before sending\n\ninterface KeyValue {\n [key: string]: string\n}\n\nexport const updateReportingContext = (properties: KeyValue) => {\n reportingTags = {...reportingTags, ...properties}\n\n if (AMPLITUDE_KEY && isFlagEnabled('amplitude')) {\n const inst = amplitude.getInstance()\n\n if (!inst._isInitialized) {\n inst.init(AMPLITUDE_KEY)\n }\n\n if (properties.hasOwnProperty('userID')) {\n delete reportingTags.userID\n inst.setUserId(properties.userID)\n }\n\n inst.setUserProperties(reportingTags)\n }\n}\n\nexport const toNano = (ms: number) => Math.round(ms * 1000000)\n\n// NOTE: typescript can't follow the API results for flags,\n// so we need to convert them to strings here\nexport const cleanTags = (data: Point): Point => {\n return {\n ...data,\n tags: Object.entries(data.tags).reduce((acc, [key, val]) => {\n if (typeof val === 'boolean') {\n acc[key] = val ? 'true' : 'false'\n return acc\n }\n\n if (!isNaN(parseFloat(val as any))) {\n acc[key] = '' + val\n return acc\n }\n\n if (!val) {\n acc[key] = val\n return acc\n }\n\n acc[key] = String(val).trim()\n return acc\n }, {}),\n }\n}\n\nconst pooledEvent = ({timestamp, measurement, fields, tags}: Point) => {\n if (isEmpty(fields)) {\n fields = {source: 'ui'}\n }\n\n reportingPoints.push(\n cleanTags({\n measurement,\n tags: {...reportingTags, ...tags, version: GIT_SHA},\n fields,\n timestamp,\n })\n )\n\n if (!!reportDecayTimeout) {\n clearTimeout(reportDecayTimeout)\n reportDecayTimeout = null\n }\n\n if (reportingPoints.length >= REPORT_MAX_LENGTH) {\n if (!!reportMaxTimeout) {\n clearTimeout(reportMaxTimeout)\n reportMaxTimeout = null\n }\n\n reportPointsAPI({\n points: reportingPoints.slice(),\n campaign: campaignInfo,\n })\n\n reportingPoints = []\n\n return\n }\n\n if (!reportMaxTimeout) {\n reportMaxTimeout = setTimeout(() => {\n reportMaxTimeout = null\n\n // points already cleared\n if (!reportingPoints.length) {\n return\n }\n\n clearTimeout(reportDecayTimeout)\n reportDecayTimeout = null\n\n reportPointsAPI({\n points: reportingPoints.slice(),\n campaign: campaignInfo,\n })\n\n reportingPoints = []\n }, REPORT_MAX_WAIT)\n }\n\n reportDecayTimeout = setTimeout(() => {\n reportPointsAPI({\n points: reportingPoints.slice(),\n campaign: campaignInfo,\n })\n\n reportingPoints = []\n }, REPORT_DECAY)\n}\n\nexport const gaEvent = (event: string, payload: object = {}) => {\n window.dataLayer = window.dataLayer || []\n window.dataLayer.push({\n event,\n ...payload,\n })\n}\n\nexport const normalizeEventName = (name: string) => {\n if (!name) {\n return 'undefined_event'\n }\n return name\n .toLowerCase()\n .replace(/-| |\\)|\\(|\\.|'|\"|=|,|`|\\[|\\]|;|:|<|>/g, '_') // replace special chars by '_'\n .replace(/^_*([^_].*[^_])_*$/, '$1') // trim '_' char\n .replace(/(_+)/g, '_') // deduplicate '_' char\n}\n\nexport const event = (\n measurement: string,\n meta: PointTags = {},\n values: PointFields = {}\n): void => {\n let time = meta.time ? new Date(meta.time).valueOf() : Date.now()\n\n if (isNaN(time)) {\n time = Date.now()\n }\n\n delete meta.time\n\n if (isFlagEnabled('streamEvents')) {\n /* eslint-disable no-console */\n console.log(`Event: [ ${measurement} ]`)\n if (Object.keys(meta).length) {\n console.log('tags')\n console.log(\n Object.entries(meta)\n .map(([k, v]) => ` ${k}: ${v}`)\n .join('\\n')\n )\n console.log('fields')\n console.log(\n Object.entries(values)\n .map(([k, v]) => ` ${k}: ${v}`)\n .join('\\n')\n )\n }\n /* eslint-enable no-console */\n }\n\n gaEvent(measurement, {...values, ...meta})\n\n if (AMPLITUDE_KEY && isFlagEnabled('amplitude')) {\n const inst = amplitude.getInstance()\n\n if (!inst._isInitialized) {\n inst.init(AMPLITUDE_KEY)\n }\n\n inst.logEvent(measurement, {...values, ...meta})\n }\n\n pooledEvent({\n timestamp: toNano(time),\n measurement,\n fields: {\n source: 'ui',\n ...values,\n },\n tags: {...meta},\n })\n}\n\nexport const useLoadTimeReporting = (measurement: string) => {\n const [loadStartTime] = useState(Date.now())\n useEffect(() => {\n event(measurement, {\n time: loadStartTime,\n })\n }, [measurement, loadStartTime])\n}\n\nexport const updateCampaignInfo = (query: string) => {\n if (CLOUD && isFlagEnabled('rudderstackReporting')) {\n const allowedUtmKeys = ['campaign', 'term', 'source', 'medium', 'content']\n const queryParams = new URLSearchParams(query)\n const info = {}\n queryParams.forEach(function (value, key) {\n if (key.startsWith('utm_')) {\n let param = key.substr(4)\n if (allowedUtmKeys.includes(param)) {\n // Rudder element uses 'name' key for campaign name (see rudder-sdk-js/index.js#L2963)\n if (param === 'campaign') {\n param = 'name'\n }\n info[param] = value\n }\n }\n })\n if (Object.keys(info).length) {\n campaignInfo = info\n }\n }\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n// Defines the schema for the secrets resource\nexport const secretsSchema = new schema.Entity(ResourceType.Secrets)\n\nexport const arrayOfSecrets = [secretsSchema]\n","// Libraries\nimport {normalize} from 'normalizr'\n\n// API\nimport {\n getOrgsSecrets as apiGetSecrets,\n patchOrgsSecrets as apiUpdateSecret,\n deleteOrgsSecret as apiDeleteSecret,\n} from 'src/client'\n\n// Schemas\nimport {secretsSchema, arrayOfSecrets} from 'src/schemas/secrets'\n\n// Types\nimport {Dispatch} from 'react'\nimport {\n RemoteDataState,\n GetState,\n ResourceType,\n Secret,\n SecretEntities,\n} from 'src/types'\n\n// Actions\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n getSecretsFailed,\n upsertSecretFailed,\n deleteSecretsFailed,\n} from 'src/shared/copy/notifications'\nimport {\n setSecrets,\n setSecret,\n removeSecret,\n Action,\n} from 'src/secrets/actions/creators'\n\n// Utils\nimport {getOrg} from 'src/organizations/selectors'\nimport {getStatus} from 'src/resources/selectors'\n\nconst makeEntitiesForSecrets = (response: Array) => {\n return response.map(element => ({id: element, key: element}))\n}\n\nexport const getSecrets =\n () => async (dispatch: Dispatch, getState: GetState) => {\n try {\n const state = getState()\n if (\n getStatus(state, ResourceType.Secrets) === RemoteDataState.NotStarted\n ) {\n dispatch(setSecrets(RemoteDataState.Loading))\n }\n\n const org = getOrg(state)\n\n const resp = await apiGetSecrets({orgID: org.id})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const secrets = makeEntitiesForSecrets(resp.data.secrets)\n const test = normalize(\n secrets,\n arrayOfSecrets\n )\n dispatch(setSecrets(RemoteDataState.Done, test))\n } catch (error) {\n console.error(error)\n dispatch(setSecrets(RemoteDataState.Error))\n dispatch(notify(getSecretsFailed()))\n }\n }\n\nexport const upsertSecret =\n (newSecret: Secret) =>\n async (dispatch: Dispatch, getState: GetState): Promise => {\n try {\n const org = getOrg(getState())\n const resp = await apiUpdateSecret({\n orgID: org.id,\n data: {\n [newSecret.id]: newSecret.value,\n },\n })\n\n if (resp.status !== 204) {\n throw new Error()\n }\n\n // Secret values shouldn't be kept around in the store! -JF\n const strippedSecret = {id: newSecret.id}\n\n const secret = normalize(\n strippedSecret,\n secretsSchema\n )\n\n dispatch(setSecret(newSecret.id, RemoteDataState.Done, secret))\n } catch (error) {\n console.error(error)\n dispatch(notify(upsertSecretFailed()))\n }\n }\n\nexport const deleteSecret =\n (secret: Secret) =>\n async (dispatch: Dispatch, getState: GetState) => {\n try {\n const org = getOrg(getState())\n const resp = await apiDeleteSecret({\n orgID: org.id,\n secretID: secret.id,\n })\n\n if (resp.status !== 204) {\n throw new Error(resp.data.message)\n }\n\n dispatch(removeSecret(secret.id))\n } catch (error) {\n console.error(error)\n dispatch(notify(deleteSecretsFailed()))\n }\n }\n","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js??ref--10-2!./TagSelectorCount.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, {FC} from 'react'\nimport './TagSelectorCount.scss'\n\ninterface OwnProps {\n count: number\n}\n\nconst TagSelectorCount: FC = ({count}) => {\n const pluralizer = count <= 1 ? '' : 's'\n\n return (\n \n {count}\n \n )\n}\n\nexport default TagSelectorCount\n","// Types\nimport {NormalizedSchema} from 'normalizr'\nimport {RemoteDataState, CellEntities} from 'src/types'\nimport {setLabelOnResource} from 'src/labels/actions/creators'\n\nimport {setViewsAndCells} from 'src/views/actions/creators'\n\nexport const SET_CELL = 'SET_CELL'\nexport const SET_CELLS = 'SET_CELLS'\nexport const REMOVE_CELL = 'REMOVE_CELL'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// R is the type of the value of the \"result\" key in normalizr's normalization\nexport type CellSchema = NormalizedSchema<\n CellEntities,\n R\n>\n\nexport const setCell = (\n id: string,\n status: RemoteDataState,\n schema?: CellSchema\n) => ({type: SET_CELL, id, status, schema} as const)\n\ntype RemoveCellArgs = {dashboardID: string; id: string}\nexport const removeCell = ({dashboardID, id}: RemoveCellArgs) =>\n ({\n type: REMOVE_CELL,\n dashboardID,\n id,\n } as const)\n\nexport const setCells = (\n dashboardID: string,\n status: RemoteDataState,\n schema?: CellSchema\n) =>\n ({\n type: SET_CELLS,\n dashboardID,\n status,\n schema,\n } as const)\n","// Types\nimport {CommunityTemplate, TemplateSummaryEntities} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nimport {InstalledStack} from 'src/types'\n\nexport const ADD_TEMPLATE_SUMMARY = 'ADD_TEMPLATE_SUMMARY'\nexport const GET_TEMPLATE_SUMMARIES_FOR_ORG = 'GET_TEMPLATE_SUMMARIES_FOR_ORG'\nexport const SET_STAGED_TEMPLATE = 'SET_STAGED_TEMPLATE'\nexport const SET_STAGED_TEMPLATE_URL = 'SET_STAGED_TEMPLATE_URL'\nexport const TOGGLE_TEMPLATE_RESOURCE_INSTALL =\n 'TOGGLE_TEMPLATE_RESOURCE_INSTALL'\nexport const UPDATE_TEMPLATE_ENV_REF = 'UPDATE_TEMPLATE_ENV_REF'\n\nexport const SET_STACKS = 'SET_STACKS'\nexport const DELETE_STACKS = 'DELETE_STACKS'\nexport const SET_TEMPLATE_README = 'SET_TEMPLATE_README'\n\nexport type EnvRefValue = string | number | boolean\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\ntype TemplateSummarySchema = NormalizedSchema<\n TemplateSummaryEntities,\n R\n>\n\n// Action Creators\nexport const addTemplateSummary = (schema: TemplateSummarySchema) =>\n ({\n type: ADD_TEMPLATE_SUMMARY,\n schema,\n } as const)\n\nexport const setStagedCommunityTemplate = (template: CommunityTemplate) =>\n ({\n type: SET_STAGED_TEMPLATE,\n template,\n } as const)\n\nexport const setStagedTemplateUrl = (templateUrl: string) =>\n ({\n type: SET_STAGED_TEMPLATE_URL,\n templateUrl,\n } as const)\n\nexport const updateTemplateEnvReferences = (\n envRefKey: string,\n resourceField: string,\n newValue: EnvRefValue,\n valueType: string\n) =>\n ({\n type: UPDATE_TEMPLATE_ENV_REF,\n envRefKey,\n resourceField,\n newValue,\n valueType,\n } as const)\n\nexport const toggleTemplateResourceInstall = (\n resourceType: string,\n templateMetaName: string,\n shouldInstall: boolean\n) =>\n ({\n type: TOGGLE_TEMPLATE_RESOURCE_INSTALL,\n resourceType,\n templateMetaName,\n shouldInstall,\n } as const)\n\nexport const setStacks = (stacks: InstalledStack[]) =>\n ({\n type: SET_STACKS,\n stacks,\n } as const)\n\nexport const removeStack = (stackID: string) =>\n ({\n type: DELETE_STACKS,\n stackID,\n } as const)\n\nexport const setTemplateReadMe = (templateName: string, readmeText: string) =>\n ({\n type: SET_TEMPLATE_README,\n templateName,\n readmeText,\n } as const)\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {ResourceType} from 'src/types'\n\n/* Authorizations */\n\n// Defines the schema for the \"authorizations\" resource\nexport const authSchema = new schema.Entity(ResourceType.Authorizations)\nexport const arrayOfAuths = [authSchema]\n","// Utils\nimport {parseDuration, timeRangeToDuration} from 'src/shared/utils/duration'\nimport {asAssignment} from 'src/variables/selectors'\n\n// Constants\nimport {TIME_RANGE_START, TIME_RANGE_STOP} from 'src/variables/constants'\n\n// Types\nimport {RemoteDataState, TimeRange, Variable} from 'src/types'\nimport {VariableAssignment} from 'src/types/ast'\n\n// TODO kill this function\nexport const getTimeRangeVars = (\n timeRange: TimeRange\n): VariableAssignment[] => {\n return [\n getRangeVariable(TIME_RANGE_START, timeRange),\n getRangeVariable(TIME_RANGE_STOP, timeRange),\n ].map(v => asAssignment(v))\n}\n\nexport const getRangeVariable = (\n which: string,\n timeRange: TimeRange\n): Variable => {\n const range = which === TIME_RANGE_START ? timeRange.lower : timeRange.upper\n\n if (which === TIME_RANGE_STOP && !timeRange.upper) {\n return {\n orgID: '',\n id: TIME_RANGE_STOP,\n name: TIME_RANGE_STOP,\n arguments: {\n type: 'system',\n values: ['now()'],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n }\n\n if (which === TIME_RANGE_START && timeRange.type !== 'custom') {\n const duration = parseDuration(timeRangeToDuration(timeRange))\n\n return {\n orgID: '',\n id: which,\n name: which,\n arguments: {\n type: 'system',\n values: [duration],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n }\n\n if (isNaN(Date.parse(range))) {\n return {\n orgID: '',\n id: which,\n name: which,\n arguments: {\n type: 'system',\n values: [null],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n }\n\n return {\n orgID: '',\n id: which,\n name: which,\n arguments: {\n type: 'system',\n values: [range],\n },\n status: RemoteDataState.Done,\n labels: [],\n }\n}\n","import {\n TemplateType,\n LabelIncluded,\n VariableIncluded,\n Relationships,\n LabelRelationship,\n Label,\n Variable,\n} from 'src/types'\n\nexport function findIncludedsFromRelationships<\n T extends {id: string; type: TemplateType}\n>(\n includeds: {id: string; type: TemplateType}[],\n relationships: {id: string; type: TemplateType}[]\n): T[] {\n let intersection = []\n relationships.forEach(r => {\n const included = findIncludedFromRelationship(includeds, r)\n if (included) {\n intersection = [...intersection, included]\n }\n })\n return intersection\n}\n\nexport function findIncludedFromRelationship<\n T extends {id: string; type: TemplateType}\n>(\n included: {id: string; type: TemplateType}[],\n r: {id: string; type: TemplateType}\n): T {\n return included.find((i): i is T => i.id === r.id && i.type === r.type)\n}\n\nexport const findLabelsToCreate = (\n currentLabels: Label[],\n labels: LabelIncluded[]\n): LabelIncluded[] => {\n return labels.filter(\n l => !currentLabels.find(el => el.name === l.attributes.name)\n )\n}\n\nexport const findIncludedVariables = (included: {type: TemplateType}[]) => {\n return included.filter((r): r is VariableIncluded => r.type === 'variable')\n}\n\nexport const findVariablesToCreate = (\n existingVariables: Variable[],\n incomingVariables: VariableIncluded[]\n): VariableIncluded[] => {\n return incomingVariables.filter(\n v => !existingVariables.find(ev => ev.name === v.attributes.name)\n )\n}\n\nexport const hasLabelsRelationships = (resource: {\n relationships?: Relationships\n}) => !!resource.relationships && !!resource.relationships['label']\n\nexport const getLabelRelationships = (resource: {\n relationships?: Relationships\n}): LabelRelationship[] => {\n if (!hasLabelsRelationships(resource)) {\n return []\n }\n\n return [].concat(resource.relationships['label'].data)\n}\n\nexport const getIncludedLabels = (included: {type: TemplateType}[]) =>\n included.filter((i): i is LabelIncluded => i.type === 'label')\n\nexport interface TemplateDetails {\n directory: string\n templateExtension: string\n templateName: string\n}\n\n// See https://github.com/influxdata/community-templates/\nconst getTemplateDetailsFromGithubSource = (url: string): TemplateDetails => {\n const [, templatePath] = url.split('/master/')\n const [directory, name] = templatePath.split('/')\n const [templateName, templateExtension] = name.split('.')\n return {\n directory,\n templateExtension,\n templateName,\n }\n}\n\n// todo: implement when we load files\nconst getTemplateDetailsFromFileSource = (_source: string): TemplateDetails => {\n return {\n directory: '',\n templateExtension: '',\n templateName: '',\n }\n}\n\nexport const getTemplateNameFromUrl = (\n url: string\n): {name: string; extension: string; directory: string} => {\n const urlSplit = url.split('/')\n const fullName = urlSplit.pop()\n const directory = urlSplit.pop()\n const [name, extension] = fullName.split('.')\n return {name, extension, directory}\n}\n\nexport const getTemplateDetails = (source: string): TemplateDetails => {\n if (source.includes('https')) {\n return getTemplateDetailsFromGithubSource(source)\n }\n\n if (source.includes('file://')) {\n return getTemplateDetailsFromFileSource(source)\n }\n\n throw new Error('unsupported format')\n}\n\nexport const getGithubUrlFromTemplateDetails = (\n directory: string,\n templateName: string,\n templateExtension: string\n): string => {\n return `https://github.com/influxdata/community-templates/blob/master/${directory}/${templateName}.${templateExtension}`\n}\n\nexport const TEMPLATE_URL_VALID = \"You're good to go!\"\nexport const TEMPLATE_URL_WARN =\n 'This URL does not point to our Community Templates repository. It may work but we cannot guarantee quality results.'\n\nexport const validateTemplateURL = (url): string => {\n if (url === '') {\n return ''\n }\n\n /*\n url may or may not have a query at the end. Either case is a valid url.\n We need to make sure the url is pointing to a valid template.\n */\n const cleanUrl = url.trim().split('?')[0]\n\n if (cleanUrl.includes(' ')) {\n return \"Your URL can't contain spaces\"\n }\n\n const isCommunityTemplates =\n cleanUrl.startsWith('https://github.com/influxdata/community-templates') ||\n cleanUrl.startsWith(\n 'https://raw.githubusercontent.com/influxdata/community-templates'\n )\n\n const isCorrectFileType =\n cleanUrl.endsWith('.yml') ||\n cleanUrl.endsWith('.json') ||\n cleanUrl.endsWith('.jsonnet')\n\n if (isCommunityTemplates && !isCorrectFileType) {\n return \"This URL correctly points to the Community Templates repository but isn't pointing to a YAML or JSON file\"\n }\n\n if (!isCommunityTemplates && isCorrectFileType) {\n return TEMPLATE_URL_WARN\n }\n\n if (!isCommunityTemplates && !isCorrectFileType) {\n return \"We can't use that URL\"\n }\n\n return TEMPLATE_URL_VALID\n}\n\nexport const readMeFormatter = (text: string) => {\n const setupInstuctions =\n '## Setup Instructions' + text.split('## Setup Instructions')[1]\n const fixLink = setupInstuctions.replace(\n '../docs/use_a_template.md',\n 'https://github.com/influxdata/community-templates/blob/master/docs/use_a_template.md'\n )\n\n return fixLink\n}\n","export const PROJECT_NAME: string = 'Notebook'\nexport const DEFAULT_PROJECT_NAME: string = `Untitled ${PROJECT_NAME}`\nexport const PROJECT_NAME_SHORT: string = 'Books'\nexport const PROJECT_NAME_PLURAL: string = `${PROJECT_NAME}s`\n","import React, {FC, useContext, useEffect, useState, useRef} from 'react'\nimport {FluxResult} from 'src/types/flows'\nimport {FlowContext} from 'src/flows/context/flow.current'\nimport {RemoteDataState} from 'src/types'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\n\ninterface Hash {\n [key: string]: T\n}\n\nconst EMPTY_STATE = {} as Hash\n\ninterface ResultsContextType {\n results: Hash\n setResult: (id: string, result: Partial) => void\n statuses: Hash\n setStatuses: (status: Partial>) => void\n}\n\nconst DEFAULT_CONTEXT: ResultsContextType = {\n results: EMPTY_STATE,\n setResult: (_: string, __: Partial) => {},\n statuses: {},\n setStatuses: _ => {},\n}\n\nexport const ResultsContext =\n React.createContext(DEFAULT_CONTEXT)\n\nexport const ResultsProvider: FC = ({children}) => {\n const {flow} = useContext(FlowContext)\n const [statuses, setStatuses] = useState>({})\n const [results, setResults] = useState({...EMPTY_STATE})\n\n const updates = useRef([])\n const [inc, setInc] = useState(0)\n\n useEffect(() => {\n setResults({...EMPTY_STATE})\n }, [flow?.id])\n\n useEffect(() => {\n if (!updates.current.length) {\n return\n }\n\n let sChange = false\n let rChange = false\n\n while (updates.current.length) {\n const [t, id, val] = updates.current.pop()\n if (t === 'status') {\n statuses[id] = val\n sChange = true\n }\n\n if (t === 'result') {\n results[id] = val\n rChange = true\n }\n }\n\n if (rChange) {\n setResults({...results})\n }\n\n if (sChange) {\n setStatuses({...statuses})\n }\n\n setInc(inc + 1)\n }, [inc])\n\n const value = {\n results,\n setResult: (id: string, result: Partial) => {\n if (!isFlagEnabled('fastFlows')) {\n results[id] = {\n source: '',\n parsed: null,\n ...result,\n }\n setResults({...results})\n\n return\n }\n\n updates.current.push(['result', id, result])\n if (updates.current.length > 1) {\n return\n }\n\n setInc(inc + 1)\n },\n statuses,\n setStatuses: (stats: Partial>) => {\n if (!isFlagEnabled('fastFlows')) {\n setStatuses(prev => ({\n ...prev,\n ...stats,\n }))\n\n return\n }\n\n Object.entries(stats).forEach(([id, stat]) => {\n updates.current.push(['status', id, stat])\n })\n\n if (updates.current.length > Object.keys(stats).length) {\n return\n }\n setInc(inc + 1)\n },\n }\n\n return (\n {children}\n )\n}\n","// Libraries\nimport React, {useState, SFC, KeyboardEvent} from 'react'\n\n// Components\nimport {Form, Input, SelectGroup, Grid} from '@influxdata/clockface'\n\n// Utils\nimport {useOneWayState} from 'src/shared/utils/useOneWayState'\n\n// Types\nimport {Columns, ButtonShape} from '@influxdata/clockface'\n\ninterface MinMaxInputsProps {\n initialMin: string\n initialMax: string\n onSetMinMax: (minMax: [number, number]) => void\n}\n\nconst MinMaxInputs: SFC = ({\n initialMin,\n initialMax,\n onSetMinMax,\n}) => {\n const [minInput, setMinInput] = useOneWayState(initialMin)\n const [maxInput, setMaxInput] = useOneWayState(initialMax)\n\n const emitIfValid = () => {\n let newMin = parseFloat(minInput)\n let newMax = parseFloat(maxInput)\n if (isNaN(newMin)) {\n newMin = null\n }\n\n if (isNaN(newMax)) {\n newMax = null\n }\n\n if (initialMin === minInput && initialMax === maxInput) {\n // Only emit the change event if an actual change has occurred\n return\n }\n\n onSetMinMax([newMin, newMax])\n }\n\n const handleKeyPress = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n emitIfValid()\n }\n }\n\n return (\n <>\n \n \n setMinInput(e.target.value)}\n onBlur={emitIfValid}\n onKeyPress={handleKeyPress}\n testID=\"auto-domain--min\"\n />\n \n \n \n \n setMaxInput(e.target.value)}\n onBlur={emitIfValid}\n onKeyPress={handleKeyPress}\n testID=\"auto-domain--max\"\n />\n \n \n \n )\n}\n\nconst formatDomainValue = (value: number | null): string => {\n return value === null ? '' : String(value)\n}\n\ninterface AutoDomainInputProps {\n domain: [number, number]\n onSetDomain: (domain: [number, number]) => void\n label?: string\n}\n\nconst AutoDomainInput: SFC = ({\n domain,\n onSetDomain,\n label = 'Set Domain',\n}) => {\n const [showInputs, setShowInputs] = useState(!!domain)\n\n const handleChooseAuto = () => {\n setShowInputs(false)\n onSetDomain(null)\n }\n\n const handleChooseCustom = () => {\n setShowInputs(true)\n }\n\n const initialMin = Array.isArray(domain) ? formatDomainValue(domain[0]) : ''\n const initialMax = Array.isArray(domain) ? formatDomainValue(domain[1]) : ''\n\n return (\n \n \n \n \n \n \n Auto\n \n \n Custom\n \n \n \n \n {showInputs && (\n \n \n \n )}\n \n \n )\n}\n\nexport default AutoDomainInput\n","import {DateTime} from 'luxon'\nimport {\n DEFAULT_TIME_FORMAT,\n RFC3339_PATTERN,\n} from 'src/utils/datetime/constants'\n\nconst formatToLuxonMap = {\n [DEFAULT_TIME_FORMAT]: {\n format: 'yyyy-MM-dd H:mm:ss',\n regex: /\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/,\n },\n 'YYYY-MM-DD': {format: 'yyyy-MM-dd', regex: /\\d{4}-\\d{2}-\\d{2}/},\n 'YYYY-MM-DD HH:mm': {\n format: 'yyyy-MM-dd H:mm',\n regex: /\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}/,\n },\n 'YYYY-MM-DD HH:mm:ss.sss': {\n format: 'yyyy-MM-dd H:mm:ss.SSS',\n regex: /\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}.\\d{3}/,\n },\n 'YYYY-MM-DD hh:mm:ss a ZZ': {\n format: 'yyyy-MM-dd h:mm:ss a ZZZ',\n regex: /\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2} \\w{2} -?\\+?\\d{4}/,\n },\n 'DD/MM/YYYY HH:mm:ss.sss': {\n format: 'dd/MM/yyyy H:mm:ss.SSS',\n regex: /\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}.\\d{3}/,\n },\n 'DD/MM/YYYY hh:mm:ss.sss a': {\n format: 'dd/MM/yyyy h:mm:ss.SSS a',\n regex: /\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}.\\d{3} \\w{2}/,\n },\n 'MM/DD/YYYY HH:mm:ss.sss': {\n format: 'MM/dd/yyyy H:mm:ss.SSS',\n regex: /\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}.\\d{3}/,\n },\n 'MM/DD/YYYY hh:mm:ss.sss a': {\n format: 'MM/dd/yyyy h:mm:ss.SSS a',\n regex: /\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}.\\d{3} \\w{2}/,\n },\n 'YYYY/MM/DD HH:mm:ss': {\n format: 'yyyy/MM/dd H:mm:ss',\n regex: /\\d{4}\\/\\d{2}\\/\\d{2} \\d{2}:\\d{2}:\\d{2}/,\n },\n 'YYYY/MM/DD hh:mm:ss a': {\n format: 'yyyy/MM/dd h:mm:ss a',\n regex: /\\d{4}\\/\\d{2}\\/\\d{2} \\d{2}:\\d{2}:\\d{2} \\w{2}/,\n },\n 'HH:mm': {format: 'H:mm', regex: /\\d{2}:\\d{2}/},\n 'hh:mm a': {format: 'h:mm a', regex: /\\d{2}:\\d{2} \\w{2}/},\n 'HH:mm:ss': {format: 'H:mm:ss', regex: /\\d{2}:\\d{2}:\\d{2}/},\n 'hh:mm:ss a': {format: 'h:mm:ss a', regex: /\\d{2}:\\d{2}:\\d{2} \\w{2}/},\n 'HH:mm:ss ZZ': {\n format: 'h:mm:ss ZZZ',\n regex: /\\d{2}:\\d{2}:\\d{2} -?\\+?\\d{4}/,\n },\n 'hh:mm:ss a ZZ': {\n format: 'h:mm:ss a ZZZ',\n regex: /\\d{2}:\\d{2}:\\d{2} \\w{2} -?\\+?\\d{4}/,\n },\n 'HH:mm:ss.sss': {format: 'H:mm:ss.SSS', regex: /\\d{2}:\\d{2}:\\d{2}.\\d{3}/},\n 'hh:mm:ss.sss a': {\n format: 'h:mm:ss.SSS a',\n regex: /\\d{2}:\\d{2}:\\d{2}.\\d{3} \\w{2}/,\n },\n 'MMMM D, YYYY HH:mm:ss': {\n format: 'LLLL d, yyyy H:mm:ss',\n regex: /[a-zA-Z]+ \\d{1,2}, \\d{4} \\d{2}:\\d{2}:\\d{2}/,\n },\n 'MMMM D, YYYY hh:mm:ss a': {\n format: 'LLLL d, yyyy h:mm:ss a',\n regex: /[a-zA-Z]+ \\d{1,2}, \\d{4} \\d{2}:\\d{2}:\\d{2} \\w{2}/,\n },\n 'dddd, MMMM D, YYYY HH:mm:ss': {\n format: 'EEEE, LLLL d, yyyy H:mm:ss',\n regex: /[a-zA-Z]+, [a-zA-Z]+ \\d{1,2}, \\d{4} \\d{2}:\\d{2}:\\d{2}/,\n },\n 'dddd, MMMM D, YYYY hh:mm:ss a': {\n format: 'EEEE, LLLL d, yyyy h:mm:ss a',\n regex: /[a-zA-Z]+, [a-zA-Z]+ \\d{1,2}, \\d{4} \\d{2}:\\d{2}:\\d{2} \\w{2}/,\n },\n}\n\nexport const getLuxonFormatString = (format: string): string => {\n const luxonFormatString = formatToLuxonMap[format].format\n ? formatToLuxonMap[format].format\n : formatToLuxonMap[DEFAULT_TIME_FORMAT].format\n\n return luxonFormatString\n}\n\nconst strictCheck = (dateString: string, format: string): boolean => {\n return formatToLuxonMap[format].regex.test(dateString)\n}\n\nexport const isValid = (\n formattedDateTimeString: string,\n format: string\n): boolean => {\n const dateFnsFormatString = getLuxonFormatString(format)\n\n return DateTime.fromFormat(formattedDateTimeString, dateFnsFormatString)\n .isValid\n}\n\n// strict check means it strictly enforces the number of digits in the format.\n// example, without strictness: HH:mm validates 9:00 and 09:00\n// with strictness: HH:mm returns true only for 09:00 and false for 9:00,\nexport const isValidStrictly = (\n formattedDateTimeString: string,\n format: string\n): boolean => {\n const dateFnsFormatString = getLuxonFormatString(format)\n\n return (\n strictCheck(formattedDateTimeString, format) &&\n DateTime.fromFormat(formattedDateTimeString, dateFnsFormatString).isValid\n )\n}\n\nexport const isValidRFC3339 = (input: string) => {\n return (\n RFC3339_PATTERN.test(input) && new Date(input).toString() !== 'Invalid Date'\n )\n}\n","import {useMemo} from 'react'\n\nexport const useAxisTicksGenerator = properties =>\n useMemo(() => {\n const {generateXAxisTicks, generateYAxisTicks} = properties\n const result = {\n xTotalTicks: null,\n xTickStart: null,\n xTickStep: null,\n yTotalTicks: null,\n yTickStart: null,\n yTickStep: null,\n }\n if (Array.isArray(generateXAxisTicks)) {\n generateXAxisTicks.forEach(\n tickOption => (result[tickOption] = properties[tickOption])\n )\n }\n if (Array.isArray(generateYAxisTicks)) {\n generateYAxisTicks.forEach(\n tickOption => (result[tickOption] = properties[tickOption])\n )\n }\n return result\n }, [properties])\n","// APIs\nimport * as api from 'src/client'\nimport {postTemplatesExport} from 'src/client'\n\n// Utils\nimport {downloadTextFile} from 'src/shared/utils/download'\n\n// Types\nimport {Cell, View, NewView, RemoteDataState} from 'src/types'\n\nexport const getView = async (\n dashboardID: string,\n cellID: string\n): Promise => {\n const resp = await api.getDashboardsCellsView({dashboardID, cellID})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n return {...resp.data, dashboardID, cellID, status: RemoteDataState.Done}\n}\n\nexport const updateView = async (\n dashboardID: string,\n cellID: string,\n view: NewView\n): Promise => {\n const resp = await api.patchDashboardsCellsView({\n dashboardID,\n cellID,\n data: view as View,\n })\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const viewWithIDs: View = {\n ...resp.data,\n dashboardID,\n cellID,\n status: RemoteDataState.Done,\n }\n\n return viewWithIDs\n}\n\nexport const cloneUtilFunc = async (\n cells: Cell[],\n oldDashID: string,\n clonedDashID: string\n) => {\n const pendingViews = cells.map(cell =>\n api\n .getDashboardsCellsView({\n dashboardID: oldDashID,\n cellID: cell.id,\n })\n .then(res => {\n return {\n ...res,\n cellID: cell.id,\n }\n })\n )\n const views = await Promise.all(pendingViews)\n\n if (views.length > 0 && views.some(v => v.status !== 200)) {\n throw new Error('An error occurred cloning the dashboard')\n }\n\n return views.map(async v => {\n const view = v.data as View\n const cell = cells.find(c => c.id === view.id)\n\n if (cell) {\n const newCell = await api.postDashboardsCell({\n dashboardID: clonedDashID,\n data: cell,\n })\n\n if (newCell.status !== 201) {\n throw new Error('An error occurred cloning the dashboard')\n }\n\n return api.patchDashboardsCellsView({\n dashboardID: clonedDashID,\n cellID: newCell.data.id,\n data: view,\n })\n }\n })\n}\n\nexport const downloadDashboardTemplate = async (dashboard): Promise => {\n const resp = await postTemplatesExport({\n data: {\n resources: [\n {\n kind: 'Dashboard',\n id: dashboard.id,\n },\n ],\n },\n })\n\n if (resp.status === 500) {\n throw new Error(resp.data.message)\n }\n\n const data = await resp.data\n downloadTextFile(JSON.stringify(data), dashboard.name, '.json', 'text/json')\n}\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport interface Routes {\n authorizations?: string\n buckets?: string\n dashboards?: string\n external?: {\n statusFeed?: string\n }\n variables?: string\n me?: string\n flags?: string\n orgs?: string\n query?: {\n self?: string\n ast?: string\n analyze?: string\n suggestions?: string\n }\n setup?: string\n signin?: string\n signout?: string\n sources?: string\n system?: {\n metrics?: string\n debug?: string\n health?: string\n }\n tasks?: string\n telegrafs?: string\n users?: string\n write?: string\n}\n\nexport interface DBRPs {\n content?: DBRP[]\n}\n\nexport interface DBRP {\n readonly id: string\n orgID: string\n bucketID: string\n database: string\n retention_policy: string\n default: boolean\n virtual?: boolean\n links?: Links\n}\n\nexport interface Links {\n next?: Link\n self: Link\n prev?: Link\n}\n\nexport type Link = string\n\nexport interface DBRPCreate {\n orgID?: string\n org?: string\n bucketID: string\n database: string\n retention_policy: string\n default?: boolean\n}\n\nexport interface DBRPGet {\n content?: DBRP\n}\n\nexport interface DBRPUpdate {\n retention_policy?: string\n default?: boolean\n}\n\nexport interface TelegrafPlugins {\n version?: string\n os?: string\n plugins?: TelegrafPlugin[]\n}\n\nexport interface TelegrafPlugin {\n type?: string\n name?: string\n description?: string\n config?: string\n}\n\nexport interface Telegrafs {\n configurations?: Telegraf[]\n}\n\nexport type Telegraf = TelegrafRequest & {\n readonly id?: string\n readonly links?: {\n self?: Link\n labels?: Link\n members?: Link\n owners?: Link\n }\n readonly labels?: Labels\n}\n\nexport interface TelegrafRequest {\n name?: string\n description?: string\n metadata?: {\n buckets?: string[]\n }\n config?: string\n orgID?: string\n}\n\nexport type Labels = Label[]\n\nexport interface Label {\n readonly id?: string\n readonly orgID?: string\n name?: string\n properties?: any\n}\n\nexport interface TelegrafPluginRequest {\n name?: string\n description?: string\n plugins?: Array<{\n type?: string\n name?: string\n alias?: string\n description?: string\n config?: string\n }>\n metadata?: {\n buckets?: string[]\n }\n config?: string\n orgID?: string\n}\n\nexport interface LabelsResponse {\n labels?: Labels\n links?: Links\n}\n\nexport interface LabelMapping {\n labelID?: string\n}\n\nexport interface LabelResponse {\n label?: Label\n links?: Links\n}\n\nexport interface ResourceMembers {\n links?: {\n self?: string\n }\n users?: ResourceMember[]\n}\n\nexport type ResourceMember = UserResponse & {\n role?: 'member'\n}\n\nexport interface UserResponse {\n readonly id?: string\n name: string\n status?: 'active' | 'inactive'\n readonly links?: {\n self?: string\n }\n}\n\nexport interface AddResourceMemberRequestBody {\n id: string\n name?: string\n}\n\nexport interface ResourceOwners {\n links?: {\n self?: string\n }\n users?: ResourceOwner[]\n}\n\nexport type ResourceOwner = UserResponse & {\n role?: 'owner'\n}\n\nexport interface LineProtocolError {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'empty value'\n | 'unavailable'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n readonly line?: number\n}\n\nexport interface LineProtocolLengthError {\n readonly code: 'invalid'\n readonly message: string\n}\n\nexport interface DeletePredicateRequest {\n start: string\n stop: string\n predicate?: string\n}\n\nexport interface LabelCreateRequest {\n orgID: string\n name: string\n properties?: any\n}\n\nexport interface LabelUpdate {\n name?: string\n properties?: any\n}\n\nexport type Dashboard = CreateDashboardRequest & {\n links?: {\n self?: Link\n cells?: Link\n members?: Link\n owners?: Link\n labels?: Link\n org?: Link\n }\n readonly id?: string\n meta?: {\n createdAt?: string\n updatedAt?: string\n }\n cells?: Cells\n labels?: Labels\n}\n\nexport interface CreateDashboardRequest {\n orgID: string\n name: string\n description?: string\n}\n\nexport type Cells = Cell[]\n\nexport interface Cell {\n id?: string\n links?: {\n self?: string\n view?: string\n }\n x?: number\n y?: number\n w?: number\n h?: number\n viewID?: string\n}\n\nexport type DashboardWithViewProperties = CreateDashboardRequest & {\n links?: {\n self?: Link\n cells?: Link\n members?: Link\n owners?: Link\n labels?: Link\n org?: Link\n }\n readonly id?: string\n meta?: {\n createdAt?: string\n updatedAt?: string\n }\n cells?: CellsWithViewProperties\n labels?: Labels\n}\n\nexport type CellsWithViewProperties = CellWithViewProperties[]\n\nexport type CellWithViewProperties = Cell & {\n name?: string\n properties?: ViewProperties\n}\n\nexport type ViewProperties =\n | LinePlusSingleStatProperties\n | XYViewProperties\n | SingleStatViewProperties\n | HistogramViewProperties\n | GaugeViewProperties\n | TableViewProperties\n | SimpleTableViewProperties\n | MarkdownViewProperties\n | CheckViewProperties\n | ScatterViewProperties\n | HeatmapViewProperties\n | MosaicViewProperties\n | BandViewProperties\n | GeoViewProperties\n\nexport interface LinePlusSingleStatProperties {\n adaptiveZoomHide?: boolean\n timeFormat?: string\n type: 'line-plus-single-stat'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n axes: Axes\n staticLegend?: StaticLegend\n xColumn?: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yColumn?: string\n generateYAxisTicks?: string[]\n yTotalTicks?: number\n yTickStart?: number\n yTickStep?: number\n shadeBelow?: boolean\n hoverDimension?: 'auto' | 'x' | 'y' | 'xy'\n position: 'overlaid' | 'stacked'\n prefix: string\n suffix: string\n decimalPlaces: DecimalPlaces\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface DashboardQuery {\n text?: string\n editMode?: QueryEditMode\n name?: string\n builderConfig?: BuilderConfig\n}\n\nexport type QueryEditMode = 'builder' | 'advanced'\n\nexport interface BuilderConfig {\n buckets?: string[]\n tags?: BuilderTagsType[]\n functions?: BuilderFunctionsType[]\n aggregateWindow?: {\n period?: string\n fillValues?: boolean\n }\n}\n\nexport interface BuilderTagsType {\n key?: string\n values?: string[]\n aggregateFunctionType?: BuilderAggregateFunctionType\n}\n\nexport type BuilderAggregateFunctionType = 'filter' | 'group'\n\nexport interface BuilderFunctionsType {\n name?: string\n}\n\nexport interface DashboardColor {\n id: string\n type: 'min' | 'max' | 'threshold' | 'scale' | 'text' | 'background'\n hex: string\n name: string\n value: number\n}\n\nexport interface Axes {\n x: Axis\n y: Axis\n}\n\nexport interface Axis {\n bounds?: string[]\n label?: string\n prefix?: string\n suffix?: string\n base?: '' | '2' | '10'\n scale?: AxisScale\n}\n\nexport type AxisScale = 'log' | 'linear'\n\nexport interface StaticLegend {\n colorizeRows?: boolean\n heightRatio?: number\n show?: boolean\n opacity?: number\n orientationThreshold?: number\n valueAxis?: string\n widthRatio?: number\n}\n\nexport interface DecimalPlaces {\n isEnforced?: boolean\n digits?: number\n}\n\nexport interface XYViewProperties {\n adaptiveZoomHide?: boolean\n timeFormat?: string\n type: 'xy'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n colorMapping?: ColorMapping\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n axes: Axes\n staticLegend?: StaticLegend\n xColumn?: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yColumn?: string\n generateYAxisTicks?: string[]\n yTotalTicks?: number\n yTickStart?: number\n yTickStep?: number\n shadeBelow?: boolean\n hoverDimension?: 'auto' | 'x' | 'y' | 'xy'\n position: 'overlaid' | 'stacked'\n geom: XYGeom\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport type ColorMapping = any\n\nexport type XYGeom =\n | 'line'\n | 'step'\n | 'stacked'\n | 'bar'\n | 'monotoneX'\n | 'stepBefore'\n | 'stepAfter'\n\nexport interface SingleStatViewProperties {\n type: 'single-stat'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n prefix: string\n tickPrefix: string\n suffix: string\n tickSuffix: string\n staticLegend?: StaticLegend\n decimalPlaces: DecimalPlaces\n}\n\nexport interface HistogramViewProperties {\n type: 'histogram'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n xColumn: string\n fillColumns: string[]\n xDomain: number[]\n xAxisLabel: string\n position: 'overlaid' | 'stacked'\n binCount: number\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface GaugeViewProperties {\n type: 'gauge'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n prefix: string\n tickPrefix: string\n suffix: string\n tickSuffix: string\n decimalPlaces: DecimalPlaces\n}\n\nexport interface TableViewProperties {\n type: 'table'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n tableOptions: {\n verticalTimeAxis?: boolean\n sortBy?: RenamableField\n wrapping?: 'truncate' | 'wrap' | 'single-line'\n fixFirstColumn?: boolean\n }\n fieldOptions: RenamableField[]\n timeFormat: string\n decimalPlaces: DecimalPlaces\n}\n\nexport interface RenamableField {\n readonly internalName?: string\n displayName?: string\n visible?: boolean\n}\n\nexport interface SimpleTableViewProperties {\n type: 'simple-table'\n showAll: boolean\n queries: DashboardQuery[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n}\n\nexport interface MarkdownViewProperties {\n type: 'markdown'\n shape: 'chronograf-v2'\n note: string\n}\n\nexport interface CheckViewProperties {\n adaptiveZoomHide?: boolean\n type: 'check'\n shape: 'chronograf-v2'\n checkID: string\n check?: Check\n queries: DashboardQuery[]\n colors: DashboardColor[]\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport type Check = CheckDiscriminator\n\nexport type CheckDiscriminator =\n | (DeadmanCheck & {type: string})\n | (ThresholdCheck & {type: string})\n | (CustomCheck & {type: string})\n\nexport type DeadmanCheck = CheckBase & {\n type: 'deadman'\n timeSince?: string\n staleTime?: string\n reportZero?: boolean\n level?: CheckStatusLevel\n every?: string\n offset?: string\n tags?: Array<{\n key?: string\n value?: string\n }>\n statusMessageTemplate?: string\n}\n\nexport interface CheckBase {\n readonly id?: string\n name: string\n orgID: string\n taskID?: string\n readonly ownerID?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n query: DashboardQuery\n status?: TaskStatusType\n description?: string\n readonly latestCompleted?: string\n readonly lastRunStatus?: 'failed' | 'success' | 'canceled'\n readonly lastRunError?: string\n labels?: Labels\n readonly links?: {\n self?: Link\n labels?: Link\n members?: Link\n owners?: Link\n query?: Link\n }\n}\n\nexport type TaskStatusType = 'active' | 'inactive'\n\nexport type CheckStatusLevel = 'UNKNOWN' | 'OK' | 'INFO' | 'CRIT' | 'WARN'\n\nexport type ThresholdCheck = CheckBase & {\n type: 'threshold'\n thresholds?: Threshold[]\n every?: string\n offset?: string\n tags?: Array<{\n key?: string\n value?: string\n }>\n statusMessageTemplate?: string\n}\n\nexport type Threshold =\n | (GreaterThreshold & {type: string})\n | (LesserThreshold & {type: string})\n | (RangeThreshold & {type: string})\n\nexport type GreaterThreshold = ThresholdBase & {\n type: 'greater'\n value: number\n}\n\nexport interface ThresholdBase {\n level?: CheckStatusLevel\n allValues?: boolean\n}\n\nexport type LesserThreshold = ThresholdBase & {\n type: 'lesser'\n value: number\n}\n\nexport type RangeThreshold = ThresholdBase & {\n type: 'range'\n min: number\n max: number\n within: boolean\n}\n\nexport type CustomCheck = CheckBase & {\n type: 'custom'\n}\n\nexport interface ScatterViewProperties {\n adaptiveZoomHide?: boolean\n timeFormat?: string\n type: 'scatter'\n queries: DashboardQuery[]\n colors: string[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n xColumn: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yColumn: string\n generateYAxisTicks?: string[]\n yTotalTicks?: number\n yTickStart?: number\n yTickStep?: number\n fillColumns: string[]\n symbolColumns: string[]\n xDomain: number[]\n yDomain: number[]\n xAxisLabel: string\n yAxisLabel: string\n xPrefix: string\n xSuffix: string\n yPrefix: string\n ySuffix: string\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface HeatmapViewProperties {\n adaptiveZoomHide?: boolean\n timeFormat?: string\n type: 'heatmap'\n queries: DashboardQuery[]\n colors: string[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n xColumn: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yColumn: string\n generateYAxisTicks?: string[]\n yTotalTicks?: number\n yTickStart?: number\n yTickStep?: number\n xDomain: number[]\n yDomain: number[]\n xAxisLabel: string\n yAxisLabel: string\n xPrefix: string\n xSuffix: string\n yPrefix: string\n ySuffix: string\n binSize: number\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface MosaicViewProperties {\n timeFormat?: string\n type: 'mosaic'\n queries: DashboardQuery[]\n colors: string[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n xColumn: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yLabelColumnSeparator?: string\n yLabelColumns?: string[]\n ySeriesColumns: string[]\n fillColumns: string[]\n xDomain: number[]\n yDomain: number[]\n xAxisLabel: string\n yAxisLabel: string\n xPrefix: string\n xSuffix: string\n yPrefix: string\n ySuffix: string\n hoverDimension?: 'auto' | 'x' | 'y' | 'xy'\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface BandViewProperties {\n adaptiveZoomHide?: boolean\n timeFormat?: string\n type: 'band'\n queries: DashboardQuery[]\n colors: DashboardColor[]\n shape: 'chronograf-v2'\n note: string\n showNoteWhenEmpty: boolean\n axes: Axes\n staticLegend?: StaticLegend\n xColumn?: string\n generateXAxisTicks?: string[]\n xTotalTicks?: number\n xTickStart?: number\n xTickStep?: number\n yColumn?: string\n generateYAxisTicks?: string[]\n yTotalTicks?: number\n yTickStart?: number\n yTickStep?: number\n upperColumn?: string\n mainColumn?: string\n lowerColumn?: string\n hoverDimension?: 'auto' | 'x' | 'y' | 'xy'\n geom: XYGeom\n legendColorizeRows?: boolean\n legendHide?: boolean\n legendOpacity?: number\n legendOrientationThreshold?: number\n}\n\nexport interface GeoViewProperties {\n type: 'geo'\n queries: DashboardQuery[]\n shape: 'chronograf-v2'\n center: {\n lat: number\n lon: number\n }\n zoom: number\n allowPanAndZoom: boolean\n detectCoordinateFields: boolean\n useS2CellID?: boolean\n s2Column?: string\n latLonColumns?: LatLonColumns\n mapStyle?: string\n note: string\n showNoteWhenEmpty: boolean\n colors?: DashboardColor[]\n layers: GeoViewLayer[]\n}\n\nexport interface LatLonColumns {\n lat: LatLonColumn\n lon: LatLonColumn\n}\n\nexport interface LatLonColumn {\n key: string\n column: string\n}\n\nexport type GeoViewLayer =\n | GeoCircleViewLayer\n | GeoHeatMapViewLayer\n | GeoPointMapViewLayer\n | GeoTrackMapViewLayer\n\nexport type GeoCircleViewLayer = GeoViewLayerProperties & {\n radiusField: string\n radiusDimension: Axis\n colorField: string\n colorDimension: Axis\n colors: DashboardColor[]\n radius?: number\n interpolateColors?: boolean\n}\n\nexport interface GeoViewLayerProperties {\n type: 'heatmap' | 'circleMap' | 'pointMap' | 'trackMap'\n}\n\nexport type GeoHeatMapViewLayer = GeoViewLayerProperties & {\n intensityField: string\n intensityDimension: Axis\n radius: number\n blur: number\n colors: DashboardColor[]\n}\n\nexport type GeoPointMapViewLayer = GeoViewLayerProperties & {\n colorField: string\n colorDimension: Axis\n colors: DashboardColor[]\n isClustered?: boolean\n tooltipColumns?: string[]\n}\n\nexport type GeoTrackMapViewLayer = GeoViewLayerProperties & any\n\nexport interface CreateCell {\n name?: string\n x?: number\n y?: number\n w?: number\n h?: number\n usingView?: string\n}\n\nexport interface CellUpdate {\n x?: number\n y?: number\n w?: number\n h?: number\n}\n\nexport interface View {\n readonly links?: {\n self?: string\n }\n readonly id?: string\n name: string\n properties: ViewProperties\n}\n\nexport interface LanguageRequest {\n query: string\n}\n\nexport interface ASTResponse {\n ast?: Package\n}\n\nexport interface Package {\n type?: NodeType\n path?: string\n package?: string\n files?: File[]\n}\n\nexport type NodeType = string\n\nexport interface File {\n type?: NodeType\n name?: string\n package?: PackageClause\n imports?: ImportDeclaration[]\n body?: Statement[]\n}\n\nexport interface PackageClause {\n type?: NodeType\n name?: Identifier\n}\n\nexport interface Identifier {\n type?: NodeType\n name?: string\n}\n\nexport interface ImportDeclaration {\n type?: NodeType\n as?: Identifier\n path?: StringLiteral\n}\n\nexport interface StringLiteral {\n type?: NodeType\n value?: string\n}\n\nexport type Statement =\n | BadStatement\n | VariableAssignment\n | MemberAssignment\n | ExpressionStatement\n | ReturnStatement\n | OptionStatement\n | BuiltinStatement\n | TestStatement\n\nexport interface BadStatement {\n type?: NodeType\n text?: string\n}\n\nexport interface VariableAssignment {\n type?: NodeType\n id?: Identifier\n init?: Expression\n}\n\nexport type Expression =\n | ArrayExpression\n | DictExpression\n | FunctionExpression\n | BinaryExpression\n | CallExpression\n | ConditionalExpression\n | LogicalExpression\n | MemberExpression\n | IndexExpression\n | ObjectExpression\n | ParenExpression\n | PipeExpression\n | UnaryExpression\n | BooleanLiteral\n | DateTimeLiteral\n | DurationLiteral\n | FloatLiteral\n | IntegerLiteral\n | PipeLiteral\n | RegexpLiteral\n | StringLiteral\n | UnsignedIntegerLiteral\n | Identifier\n\nexport interface ArrayExpression {\n type?: NodeType\n elements?: Expression[]\n}\n\nexport interface DictExpression {\n type?: NodeType\n elements?: DictItem[]\n}\n\nexport interface DictItem {\n type?: NodeType\n key?: Expression\n val?: Expression\n}\n\nexport interface FunctionExpression {\n type?: NodeType\n params?: Property[]\n body?: Node\n}\n\nexport interface Property {\n type?: NodeType\n key?: PropertyKey\n value?: Expression\n}\n\nexport type PropertyKey = Identifier | StringLiteral\n\nexport type Node = Expression | Block\n\nexport interface Block {\n type?: NodeType\n body?: Statement[]\n}\n\nexport interface BinaryExpression {\n type?: NodeType\n operator?: string\n left?: Expression\n right?: Expression\n}\n\nexport interface CallExpression {\n type?: NodeType\n callee?: Expression\n arguments?: Expression[]\n}\n\nexport interface ConditionalExpression {\n type?: NodeType\n test?: Expression\n alternate?: Expression\n consequent?: Expression\n}\n\nexport interface LogicalExpression {\n type?: NodeType\n operator?: string\n left?: Expression\n right?: Expression\n}\n\nexport interface MemberExpression {\n type?: NodeType\n object?: Expression\n property?: PropertyKey\n}\n\nexport interface IndexExpression {\n type?: NodeType\n array?: Expression\n index?: Expression\n}\n\nexport interface ObjectExpression {\n type?: NodeType\n properties?: Property[]\n}\n\nexport interface ParenExpression {\n type?: NodeType\n expression?: Expression\n}\n\nexport interface PipeExpression {\n type?: NodeType\n argument?: Expression\n call?: CallExpression\n}\n\nexport interface UnaryExpression {\n type?: NodeType\n operator?: string\n argument?: Expression\n}\n\nexport interface BooleanLiteral {\n type?: NodeType\n value?: boolean\n}\n\nexport interface DateTimeLiteral {\n type?: NodeType\n value?: string\n}\n\nexport interface DurationLiteral {\n type?: NodeType\n values?: Duration[]\n}\n\nexport interface Duration {\n type?: NodeType\n magnitude?: number\n unit?: string\n}\n\nexport interface FloatLiteral {\n type?: NodeType\n value?: number\n}\n\nexport interface IntegerLiteral {\n type?: NodeType\n value?: string\n}\n\nexport interface PipeLiteral {\n type?: NodeType\n}\n\nexport interface RegexpLiteral {\n type?: NodeType\n value?: string\n}\n\nexport interface UnsignedIntegerLiteral {\n type?: NodeType\n value?: string\n}\n\nexport interface MemberAssignment {\n type?: NodeType\n member?: MemberExpression\n init?: Expression\n}\n\nexport interface ExpressionStatement {\n type?: NodeType\n expression?: Expression\n}\n\nexport interface ReturnStatement {\n type?: NodeType\n argument?: Expression\n}\n\nexport interface OptionStatement {\n type?: NodeType\n assignment?: VariableAssignment | MemberAssignment\n}\n\nexport interface BuiltinStatement {\n type?: NodeType\n id?: Identifier\n}\n\nexport interface TestStatement {\n type?: NodeType\n assignment?: VariableAssignment\n}\n\nexport interface FluxSuggestions {\n funcs?: FluxSuggestion[]\n}\n\nexport interface FluxSuggestion {\n name?: string\n params?: any\n}\n\nexport interface Query {\n extern?: File\n query: string\n type?: 'flux'\n params?: any\n dialect?: Dialect\n now?: string\n}\n\nexport interface Dialect {\n header?: boolean\n delimiter?: string\n annotations?: Array<'group' | 'datatype' | 'default'>\n commentPrefix?: string\n dateTimeFormat?: 'RFC3339' | 'RFC3339Nano'\n}\n\nexport interface AnalyzeQueryResponse {\n errors?: Array<{\n line?: number\n column?: number\n character?: number\n message?: string\n }>\n}\n\nexport interface Buckets {\n readonly links?: Links\n buckets?: Bucket[]\n}\n\nexport interface Bucket {\n readonly links?: {\n labels?: Link\n members?: Link\n org?: Link\n owners?: Link\n self?: Link\n write?: Link\n }\n readonly id?: string\n readonly type?: 'user' | 'system'\n name: string\n description?: string\n orgID?: string\n rp?: string\n schemaType?: SchemaType\n readonly createdAt?: string\n readonly updatedAt?: string\n retentionRules: RetentionRules\n labels?: Labels\n}\n\nexport type SchemaType = 'implicit' | 'explicit'\n\nexport type RetentionRules = RetentionRule[]\n\nexport interface RetentionRule {\n type?: 'expire'\n everySeconds: number\n shardGroupDurationSeconds?: number\n}\n\nexport interface PostBucketRequest {\n orgID: string\n name: string\n description?: string\n rp?: string\n retentionRules?: RetentionRules\n schemaType?: SchemaType\n}\n\nexport interface PatchBucketRequest {\n name?: string\n description?: string\n retentionRules?: PatchRetentionRules\n}\n\nexport type PatchRetentionRules = PatchRetentionRule[]\n\nexport interface PatchRetentionRule {\n type?: 'expire'\n everySeconds: number\n shardGroupDurationSeconds?: number\n}\n\nexport interface Organizations {\n links?: Links\n orgs?: Organization[]\n}\n\nexport interface Organization {\n readonly links?: {\n self?: Link\n members?: Link\n owners?: Link\n labels?: Link\n secrets?: Link\n buckets?: Link\n tasks?: Link\n dashboards?: Link\n }\n readonly id?: string\n name: string\n description?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n status?: 'active' | 'inactive'\n}\n\nexport interface PostOrganizationRequest {\n name: string\n description?: string\n}\n\nexport interface PatchOrganizationRequest {\n name?: string\n description?: string\n}\n\nexport type SecretKeysResponse = SecretKeys & {\n readonly links?: {\n self?: string\n org?: string\n }\n}\n\nexport interface SecretKeys {\n secrets?: string[]\n}\n\nexport type Secrets = any\n\nexport interface Stack {\n id?: string\n orgID?: string\n readonly createdAt?: string\n events?: Array<{\n eventType?: string\n name?: string\n description?: string\n sources?: string[]\n resources?: Array<{\n apiVersion?: string\n resourceID?: string\n kind?: TemplateKind\n templateMetaName?: string\n associations?: Array<{\n kind?: TemplateKind\n metaName?: string\n }>\n links?: {\n self?: string\n }\n }>\n urls?: string[]\n readonly updatedAt?: string\n }>\n}\n\nexport type TemplateKind =\n | 'Bucket'\n | 'Check'\n | 'CheckDeadman'\n | 'CheckThreshold'\n | 'Dashboard'\n | 'Label'\n | 'NotificationEndpoint'\n | 'NotificationEndpointHTTP'\n | 'NotificationEndpointPagerDuty'\n | 'NotificationEndpointSlack'\n | 'NotificationRule'\n | 'Task'\n | 'Telegraf'\n | 'Variable'\n\nexport interface TemplateApply {\n dryRun?: boolean\n orgID?: string\n stackID?: string\n template?: {\n contentType?: string\n sources?: string[]\n contents?: Template\n }\n templates?: Array<{\n contentType?: string\n sources?: string[]\n contents?: Template\n }>\n envRefs?: any\n secrets?: any\n remotes?: Array<{\n url: string\n contentType?: string\n }>\n actions?: Array<\n | {\n action?: 'skipKind'\n properties?: {\n kind: TemplateKind\n }\n }\n | {\n action?: 'skipResource'\n properties?: {\n kind: TemplateKind\n resourceTemplateName: string\n }\n }\n >\n}\n\nexport type Template = Array<{\n apiVersion?: string\n kind?: TemplateKind\n metadata?: {\n name?: string\n }\n spec?: any\n}>\n\nexport interface TemplateSummary {\n sources?: string[]\n stackID?: string\n summary?: {\n buckets?: Array<{\n id?: string\n orgID?: string\n kind?: TemplateKind\n templateMetaName?: string\n name?: string\n description?: string\n retentionPeriod?: number\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }>\n checks?: Array<\n CheckDiscriminator & {\n kind?: TemplateKind\n templateMetaName?: string\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }\n >\n dashboards?: Array<{\n id?: string\n orgID?: string\n kind?: TemplateKind\n templateMetaName?: string\n name?: string\n description?: string\n labelAssociations?: TemplateSummaryLabel[]\n charts?: TemplateChart[]\n envReferences?: TemplateEnvReferences\n }>\n labels?: TemplateSummaryLabel[]\n labelMappings?: Array<{\n status?: string\n resourceTemplateMetaName?: string\n resourceName?: string\n resourceID?: string\n resourceType?: string\n labelTemplateMetaName?: string\n labelName?: string\n labelID?: string\n }>\n missingEnvRefs?: string[]\n missingSecrets?: string[]\n notificationEndpoints?: Array<\n NotificationEndpointDiscriminator & {\n kind?: TemplateKind\n templateMetaName?: string\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }\n >\n notificationRules?: Array<{\n kind?: TemplateKind\n templateMetaName?: string\n name?: string\n description?: string\n endpointTemplateMetaName?: string\n endpointID?: string\n endpointType?: string\n every?: string\n offset?: string\n messageTemplate?: string\n status?: string\n statusRules?: Array<{\n currentLevel?: string\n previousLevel?: string\n }>\n tagRules?: Array<{\n key?: string\n value?: string\n operator?: string\n }>\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }>\n tasks?: Array<{\n kind?: TemplateKind\n templateMetaName?: string\n id?: string\n name?: string\n cron?: string\n description?: string\n every?: string\n offset?: string\n query?: string\n status?: string\n envReferences?: TemplateEnvReferences\n }>\n telegrafConfigs?: Array<\n TelegrafRequest & {\n kind?: TemplateKind\n templateMetaName?: string\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }\n >\n variables?: Array<{\n kind?: TemplateKind\n templateMetaName?: string\n id?: string\n orgID?: string\n name?: string\n description?: string\n arguments?: VariableProperties\n labelAssociations?: TemplateSummaryLabel[]\n envReferences?: TemplateEnvReferences\n }>\n }\n diff?: {\n buckets?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: {\n name?: string\n description?: string\n retentionRules?: RetentionRules\n }\n old?: {\n name?: string\n description?: string\n retentionRules?: RetentionRules\n }\n }>\n checks?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: CheckDiscriminator\n old?: CheckDiscriminator\n }>\n dashboards?: Array<{\n stateStatus?: string\n id?: string\n kind?: TemplateKind\n templateMetaName?: string\n new?: {\n name?: string\n description?: string\n charts?: TemplateChart[]\n }\n old?: {\n name?: string\n description?: string\n charts?: TemplateChart[]\n }\n }>\n labels?: Array<{\n stateStatus?: string\n kind?: TemplateKind\n id?: string\n templateMetaName?: string\n new?: {\n name?: string\n color?: string\n description?: string\n }\n old?: {\n name?: string\n color?: string\n description?: string\n }\n }>\n labelMappings?: Array<{\n status?: string\n resourceType?: string\n resourceID?: string\n resourceTemplateMetaName?: string\n resourceName?: string\n labelID?: string\n labelTemplateMetaName?: string\n labelName?: string\n }>\n notificationEndpoints?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: NotificationEndpointDiscriminator\n old?: NotificationEndpointDiscriminator\n }>\n notificationRules?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: {\n name?: string\n description?: string\n endpointName?: string\n endpointID?: string\n endpointType?: string\n every?: string\n offset?: string\n messageTemplate?: string\n status?: string\n statusRules?: Array<{\n currentLevel?: string\n previousLevel?: string\n }>\n tagRules?: Array<{\n key?: string\n value?: string\n operator?: string\n }>\n }\n old?: {\n name?: string\n description?: string\n endpointName?: string\n endpointID?: string\n endpointType?: string\n every?: string\n offset?: string\n messageTemplate?: string\n status?: string\n statusRules?: Array<{\n currentLevel?: string\n previousLevel?: string\n }>\n tagRules?: Array<{\n key?: string\n value?: string\n operator?: string\n }>\n }\n }>\n tasks?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: {\n name?: string\n cron?: string\n description?: string\n every?: string\n offset?: string\n query?: string\n status?: string\n }\n old?: {\n name?: string\n cron?: string\n description?: string\n every?: string\n offset?: string\n query?: string\n status?: string\n }\n }>\n telegrafConfigs?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: TelegrafRequest\n old?: TelegrafRequest\n }>\n variables?: Array<{\n kind?: TemplateKind\n stateStatus?: string\n id?: string\n templateMetaName?: string\n new?: {\n name?: string\n description?: string\n args?: VariableProperties\n }\n old?: {\n name?: string\n description?: string\n args?: VariableProperties\n }\n }>\n }\n errors?: Array<{\n kind?: TemplateKind\n reason?: string\n fields?: string[]\n indexes?: number[]\n }>\n}\n\nexport interface TemplateSummaryLabel {\n id?: string\n orgID?: string\n kind?: TemplateKind\n templateMetaName?: string\n name?: string\n properties?: {\n color?: string\n description?: string\n }\n envReferences?: TemplateEnvReferences\n}\n\nexport type TemplateEnvReferences = Array<{\n resourceField: string\n envRefKey: string\n value?: string | number | number | boolean\n defaultValue?: string | number | number | boolean\n}>\n\nexport interface TemplateChart {\n xPos?: number\n yPos?: number\n height?: number\n width?: number\n properties?: ViewProperties\n}\n\nexport type NotificationEndpointDiscriminator =\n | (SlackNotificationEndpoint & {type: string})\n | (PagerDutyNotificationEndpoint & {type: string})\n | (HTTPNotificationEndpoint & {type: string})\n | (TelegramNotificationEndpoint & {type: string})\n\nexport type SlackNotificationEndpoint = NotificationEndpointBase & {\n url?: string\n token?: string\n}\n\nexport interface NotificationEndpointBase {\n id?: string\n orgID?: string\n userID?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n description?: string\n name: string\n status?: 'active' | 'inactive'\n labels?: Labels\n readonly links?: {\n self?: Link\n labels?: Link\n members?: Link\n owners?: Link\n }\n type: NotificationEndpointType\n}\n\nexport type NotificationEndpointType =\n | 'slack'\n | 'pagerduty'\n | 'http'\n | 'telegram'\n\nexport type PagerDutyNotificationEndpoint = NotificationEndpointBase & {\n clientURL?: string\n routingKey: string\n}\n\nexport type HTTPNotificationEndpoint = NotificationEndpointBase & {\n url: string\n username?: string\n password?: string\n token?: string\n method: 'POST' | 'GET' | 'PUT'\n authMethod: 'none' | 'basic' | 'bearer'\n contentTemplate?: string\n headers?: any\n}\n\nexport type TelegramNotificationEndpoint = NotificationEndpointBase & {\n token: string\n channel: string\n}\n\nexport type VariableProperties =\n | QueryVariableProperties\n | ConstantVariableProperties\n | MapVariableProperties\n\nexport interface QueryVariableProperties {\n type?: 'query'\n values?: {\n query?: string\n language?: string\n }\n}\n\nexport interface ConstantVariableProperties {\n type?: 'constant'\n values?: string[]\n}\n\nexport interface MapVariableProperties {\n type?: 'map'\n values?: any\n}\n\nexport interface TemplateExportByID {\n stackID?: string\n orgIDs?: Array<{\n orgID?: string\n resourceFilters?: {\n byLabel?: string[]\n byResourceKind?: TemplateKind[]\n }\n }>\n resources?: Array<{\n id: string\n kind: TemplateKind\n name?: string\n }>\n}\n\nexport interface TemplateExportByName {\n stackID?: string\n orgIDs?: Array<{\n orgID?: string\n resourceFilters?: {\n byLabel?: string[]\n byResourceKind?: TemplateKind[]\n }\n }>\n resources?: Array<{\n kind: TemplateKind\n name: string\n }>\n}\n\nexport interface Runs {\n links?: Links\n runs?: Run[]\n}\n\nexport interface Run {\n readonly id?: string\n readonly taskID?: string\n readonly status?: 'scheduled' | 'started' | 'failed' | 'success' | 'canceled'\n scheduledFor?: string\n readonly log?: LogEvent[]\n readonly flux?: string\n readonly startedAt?: string\n readonly finishedAt?: string\n readonly requestedAt?: string\n readonly links?: {\n self?: string\n task?: string\n retry?: string\n }\n}\n\nexport interface LogEvent {\n readonly time?: string\n readonly message?: string\n readonly runID?: string\n}\n\nexport interface RunManually {\n scheduledFor?: string\n}\n\nexport interface Logs {\n readonly events?: LogEvent[]\n}\n\nexport type Flags = any\n\nexport interface PasswordResetBody {\n password: string\n}\n\nexport interface Checks {\n checks?: Check[]\n links?: Links\n}\n\nexport type PostCheck = CheckDiscriminator\n\nexport interface CheckPatch {\n name?: string\n description?: string\n status?: 'active' | 'inactive'\n}\n\nexport interface NotificationRules {\n notificationRules?: NotificationRule[]\n links?: Links\n}\n\nexport type NotificationRule = NotificationRuleDiscriminator\n\nexport type NotificationRuleDiscriminator =\n | (SlackNotificationRule & {type: string})\n | (SMTPNotificationRule & {type: string})\n | (PagerDutyNotificationRule & {type: string})\n | (HTTPNotificationRule & {type: string})\n | (TelegramNotificationRule & {type: string})\n\nexport type SlackNotificationRule = NotificationRuleBase &\n SlackNotificationRuleBase\n\nexport interface NotificationRuleBase {\n readonly latestCompleted?: string\n readonly lastRunStatus?: 'failed' | 'success' | 'canceled'\n readonly lastRunError?: string\n readonly id?: string\n endpointID: string\n orgID: string\n taskID?: string\n readonly ownerID?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n status: TaskStatusType\n name: string\n sleepUntil?: string\n every?: string\n offset?: string\n runbookLink?: string\n limitEvery?: number\n limit?: number\n tagRules?: TagRule[]\n description?: string\n statusRules: StatusRule[]\n labels?: Labels\n readonly links?: {\n self?: Link\n labels?: Link\n members?: Link\n owners?: Link\n query?: Link\n }\n}\n\nexport interface TagRule {\n key?: string\n value?: string\n operator?: 'equal' | 'notequal' | 'equalregex' | 'notequalregex'\n}\n\nexport interface StatusRule {\n currentLevel?: RuleStatusLevel\n previousLevel?: RuleStatusLevel\n count?: number\n period?: string\n}\n\nexport type RuleStatusLevel =\n | 'UNKNOWN'\n | 'OK'\n | 'INFO'\n | 'CRIT'\n | 'WARN'\n | 'ANY'\n\nexport interface SlackNotificationRuleBase {\n type: 'slack'\n channel?: string\n messageTemplate: string\n}\n\nexport type SMTPNotificationRule = NotificationRuleBase &\n SMTPNotificationRuleBase\n\nexport interface SMTPNotificationRuleBase {\n type: 'smtp'\n subjectTemplate: string\n bodyTemplate?: string\n to: string\n}\n\nexport type PagerDutyNotificationRule = NotificationRuleBase &\n PagerDutyNotificationRuleBase\n\nexport interface PagerDutyNotificationRuleBase {\n type: 'pagerduty'\n messageTemplate: string\n}\n\nexport type HTTPNotificationRule = NotificationRuleBase &\n HTTPNotificationRuleBase\n\nexport interface HTTPNotificationRuleBase {\n type: 'http'\n url?: string\n}\n\nexport type TelegramNotificationRule = NotificationRuleBase &\n TelegramNotificationRuleBase\n\nexport interface TelegramNotificationRuleBase {\n type: 'telegram'\n messageTemplate: string\n parseMode?: 'MarkdownV2' | 'HTML' | 'Markdown'\n disableWebPagePreview?: boolean\n}\n\nexport type PostNotificationRule = NotificationRuleDiscriminator\n\nexport interface FluxResponse {\n flux?: string\n}\n\nexport interface NotificationRuleUpdate {\n name?: string\n description?: string\n status?: 'active' | 'inactive'\n}\n\nexport interface NotificationEndpoints {\n notificationEndpoints?: NotificationEndpoint[]\n links?: Links\n}\n\nexport type NotificationEndpoint = NotificationEndpointDiscriminator\n\nexport type PostNotificationEndpoint = NotificationEndpointDiscriminator\n\nexport interface NotificationEndpointUpdate {\n name?: string\n description?: string\n status?: 'active' | 'inactive'\n}\n\nexport interface HealthCheck {\n name: string\n message?: string\n checks?: HealthCheck[]\n status: 'pass' | 'fail'\n version?: string\n commit?: string\n}\n\nexport interface Ready {\n status?: 'ready'\n started?: string\n up?: string\n}\n\nexport interface Users {\n links?: {\n self?: string\n }\n users?: UserResponse[]\n}\n\nexport interface User {\n readonly id?: string\n oauthID?: string\n name: string\n status?: 'active' | 'inactive'\n}\n\nexport interface IsOnboarding {\n allowed?: boolean\n}\n\nexport interface OnboardingRequest {\n username: string\n password?: string\n org: string\n bucket: string\n retentionPeriodSeconds?: number\n retentionPeriodHrs?: number\n token?: string\n}\n\nexport interface OnboardingResponse {\n user?: UserResponse\n org?: Organization\n bucket?: Bucket\n auth?: Authorization\n}\n\nexport type Authorization = AuthorizationUpdateRequest & {\n readonly createdAt?: string\n readonly updatedAt?: string\n orgID?: string\n permissions?: Permission[]\n readonly id?: string\n readonly token?: string\n readonly userID?: string\n readonly user?: string\n readonly org?: string\n readonly links?: {\n readonly self?: Link\n readonly user?: Link\n }\n}\n\nexport interface AuthorizationUpdateRequest {\n status?: 'active' | 'inactive'\n description?: string\n}\n\nexport interface Permission {\n action: 'read' | 'write'\n resource: Resource\n}\n\nexport interface Resource {\n type:\n | 'authorizations'\n | 'buckets'\n | 'dashboards'\n | 'orgs'\n | 'sources'\n | 'tasks'\n | 'telegrafs'\n | 'users'\n | 'variables'\n | 'scrapers'\n | 'secrets'\n | 'labels'\n | 'views'\n | 'documents'\n | 'notificationRules'\n | 'notificationEndpoints'\n | 'checks'\n | 'dbrp'\n | 'notebooks'\n | 'annotations'\n | 'remotes'\n | 'replications'\n | 'instance'\n id?: string\n name?: string\n orgID?: string\n org?: string\n}\n\nexport interface Authorizations {\n readonly links?: Links\n authorizations?: Authorization[]\n}\n\nexport type AuthorizationPostRequest = AuthorizationUpdateRequest & {\n orgID?: string\n userID?: string\n permissions?: Permission[]\n}\n\nexport interface Variables {\n variables?: Variable[]\n}\n\nexport interface Variable {\n readonly links?: {\n self?: string\n org?: string\n labels?: string\n }\n readonly id?: string\n orgID: string\n name: string\n description?: string\n selected?: string[]\n labels?: Labels\n arguments: VariableProperties\n createdAt?: string\n updatedAt?: string\n}\n\nexport interface Sources {\n links?: {\n self?: string\n }\n sources?: Source[]\n}\n\nexport interface Source {\n links?: {\n self?: string\n query?: string\n health?: string\n buckets?: string\n }\n id?: string\n orgID?: string\n default?: boolean\n name?: string\n type?: 'v1' | 'v2' | 'self'\n url?: string\n insecureSkipVerify?: boolean\n telegraf?: string\n token?: string\n username?: string\n password?: string\n sharedSecret?: string\n metaUrl?: string\n defaultRP?: string\n readonly languages?: Array<'flux' | 'influxql'>\n}\n\nexport interface ScraperTargetResponses {\n configurations?: ScraperTargetResponse[]\n}\n\nexport type ScraperTargetResponse = ScraperTargetRequest & {\n readonly id?: string\n org?: string\n bucket?: string\n readonly links?: {\n self?: Link\n members?: Link\n owners?: Link\n bucket?: Link\n organization?: Link\n }\n}\n\nexport interface ScraperTargetRequest {\n name?: string\n type?: 'prometheus'\n url?: string\n orgID?: string\n bucketID?: string\n allowInsecure?: boolean\n}\n\nexport interface MetadataBackup {\n kv: string\n sql: string\n buckets: BucketMetadataManifests\n}\n\nexport type BucketMetadataManifests = BucketMetadataManifest[]\n\nexport interface BucketMetadataManifest {\n organizationID: string\n organizationName: string\n bucketID: string\n bucketName: string\n description?: string\n defaultRetentionPolicy: string\n retentionPolicies: RetentionPolicyManifests\n}\n\nexport type RetentionPolicyManifests = RetentionPolicyManifest[]\n\nexport interface RetentionPolicyManifest {\n name: string\n replicaN: number\n duration: number\n shardGroupDuration: number\n shardGroups: ShardGroupManifests\n subscriptions: SubscriptionManifests\n}\n\nexport type ShardGroupManifests = ShardGroupManifest[]\n\nexport interface ShardGroupManifest {\n id: number\n startTime: string\n endTime: string\n deletedAt?: string\n truncatedAt?: string\n shards: ShardManifests\n}\n\nexport type ShardManifests = ShardManifest[]\n\nexport interface ShardManifest {\n id: number\n shardOwners: ShardOwners\n}\n\nexport type ShardOwners = ShardOwner[]\n\nexport interface ShardOwner {\n nodeID: number\n}\n\nexport type SubscriptionManifests = SubscriptionManifest[]\n\nexport interface SubscriptionManifest {\n name: string\n mode: string\n destinations: string[]\n}\n\nexport interface RestoredBucketMappings {\n id: string\n name: string\n shardMappings: BucketShardMappings\n}\n\nexport type BucketShardMappings = BucketShardMapping[]\n\nexport interface BucketShardMapping {\n oldId: number\n newId: number\n}\n\nexport interface Config {\n config?: any\n}\n\nexport interface RemoteConnections {\n remotes?: RemoteConnection[]\n}\n\nexport interface RemoteConnection {\n id: string\n name: string\n orgID: string\n description?: string\n remoteURL: string\n remoteOrgID: string\n allowInsecureTLS: boolean\n}\n\nexport interface RemoteConnectionCreationRequest {\n name: string\n description?: string\n orgID: string\n remoteURL: string\n remoteAPIToken: string\n remoteOrgID: string\n allowInsecureTLS: boolean\n}\n\nexport interface RemoteConnectionUpdateRequest {\n name?: string\n description?: string\n remoteURL?: string\n remoteAPIToken?: string\n remoteOrgID?: string\n allowInsecureTLS?: boolean\n}\n\nexport interface Replications {\n replications?: Replication[]\n}\n\nexport interface Replication {\n id: string\n name: string\n description?: string\n orgID: string\n remoteID: string\n localBucketID: string\n remoteBucketID?: string\n remoteBucketName?: string\n maxQueueSizeBytes: number\n currentQueueSizeBytes: number\n latestResponseCode?: number\n latestErrorMessage?: string\n dropNonRetryableData?: boolean\n}\n\nexport interface ReplicationCreationRequest {\n name: string\n description?: string\n orgID: string\n remoteID: string\n localBucketID: string\n remoteBucketID?: string\n remoteBucketName?: string\n maxQueueSizeBytes: number\n dropNonRetryableData?: boolean\n maxAgeSeconds: number\n}\n\nexport interface ReplicationUpdateRequest {\n name?: string\n description?: string\n remoteID?: string\n remoteBucketID?: string\n remoteBucketName?: string\n maxQueueSizeBytes?: number\n dropNonRetryableData?: boolean\n maxAgeSeconds?: number\n}\n\nexport interface Dashboards {\n links?: Links\n dashboards?: Dashboard[]\n}\n\nexport interface Tasks {\n readonly links?: Links\n tasks?: Task[]\n}\n\nexport interface Task {\n readonly id: string\n orgID: string\n org?: string\n name: string\n ownerID?: string\n description?: string\n status?: TaskStatusType\n labels?: Labels\n authorizationID?: string\n flux: string\n every?: string\n cron?: string\n offset?: string\n readonly latestCompleted?: string\n readonly lastRunStatus?: 'failed' | 'success' | 'canceled'\n readonly lastRunError?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n readonly links?: {\n self?: Link\n owners?: Link\n members?: Link\n runs?: Link\n logs?: Link\n labels?: Link\n }\n}\n\nexport interface TaskCreateRequest {\n orgID?: string\n org?: string\n status?: TaskStatusType\n flux: string\n description?: string\n}\n\nexport interface TaskUpdateRequest {\n status?: TaskStatusType\n flux?: string\n name?: string\n every?: string\n cron?: string\n offset?: string\n description?: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface PostSigninParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n\n auth: {\n username: string\n password: string\n }\n}\n\ntype PostSigninResult =\n | PostSigninNoContentResult\n | PostSigninUnauthorizedResult\n | PostSigninForbiddenResult\n | PostSigninDefaultResult\n\ninterface PostSigninNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostSigninUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostSigninForbiddenResult {\n status: 403\n headers: Headers\n data: Error\n}\n\ninterface PostSigninDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postSignin = (\n params: PostSigninParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/signin',\n params,\n options\n ) as Promise\n\nexport interface PostSignoutParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostSignoutResult =\n | PostSignoutNoContentResult\n | PostSignoutUnauthorizedResult\n | PostSignoutDefaultResult\n\ninterface PostSignoutNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostSignoutUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostSignoutDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postSignout = (\n params: PostSignoutParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/signout',\n params,\n options\n ) as Promise\n\nexport interface GetPingParams {}\n\ntype GetPingResult = GetPingNoContentResult\n\ninterface GetPingNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\nexport const getPing = (\n params: GetPingParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/ping', params, options) as Promise\n\nexport interface GetParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetResult = GetDefaultResult\n\ninterface GetDefaultResult {\n status: 500\n headers: Headers\n data: Routes\n}\n\nexport const get = (\n params: GetParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/', params, options) as Promise\n\nexport interface GetDbrpsParams {\n query?: {\n orgID?: string\n org?: string\n id?: string\n bucketID?: string\n default?: any\n db?: string\n rp?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDbrpsResult =\n | GetDbrpsOKResult\n | GetDbrpsBadRequestResult\n | GetDbrpsDefaultResult\n\ninterface GetDbrpsOKResult {\n status: 200\n headers: Headers\n data: DBRPs\n}\n\ninterface GetDbrpsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetDbrpsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDbrps = (\n params: GetDbrpsParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/dbrps', params, options) as Promise\n\nexport interface PostDbrpParams {\n data: DBRPCreate\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDbrpResult =\n | PostDbrpCreatedResult\n | PostDbrpBadRequestResult\n | PostDbrpDefaultResult\n\ninterface PostDbrpCreatedResult {\n status: 201\n headers: Headers\n data: DBRP\n}\n\ninterface PostDbrpBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostDbrpDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDbrp = (\n params: PostDbrpParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/dbrps',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetDbrpParams {\n dbrpID: string\n\n query?: {\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDbrpResult =\n | GetDbrpOKResult\n | GetDbrpBadRequestResult\n | GetDbrpDefaultResult\n\ninterface GetDbrpOKResult {\n status: 200\n headers: Headers\n data: DBRPGet\n}\n\ninterface GetDbrpBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetDbrpDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDbrp = (\n params: GetDbrpParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dbrps/${params.dbrpID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchDbrpParams {\n dbrpID: string\n\n data: DBRPUpdate\n\n query?: {\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchDbrpResult =\n | PatchDbrpOKResult\n | PatchDbrpBadRequestResult\n | PatchDbrpNotFoundResult\n | PatchDbrpDefaultResult\n\ninterface PatchDbrpOKResult {\n status: 200\n headers: Headers\n data: DBRPGet\n}\n\ninterface PatchDbrpBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchDbrpNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchDbrpDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchDbrp = (\n params: PatchDbrpParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/dbrps/${params.dbrpID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDbrpParams {\n dbrpID: string\n\n query?: {\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDbrpResult =\n | DeleteDbrpNoContentResult\n | DeleteDbrpBadRequestResult\n | DeleteDbrpDefaultResult\n\ninterface DeleteDbrpNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDbrpBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteDbrpDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDbrp = (\n params: DeleteDbrpParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dbrps/${params.dbrpID}`,\n params,\n options\n ) as Promise\n\nexport interface GetTelegrafPluginsParams {\n query?: {\n type?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTelegrafPluginsResult =\n | GetTelegrafPluginsOKResult\n | GetTelegrafPluginsDefaultResult\n\ninterface GetTelegrafPluginsOKResult {\n status: 200\n headers: Headers\n data: TelegrafPlugins\n}\n\ninterface GetTelegrafPluginsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegrafPlugins = (\n params: GetTelegrafPluginsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/telegraf/plugins',\n params,\n options\n ) as Promise\n\nexport interface GetTelegrafsParams {\n query?: {\n orgID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTelegrafsResult = GetTelegrafsOKResult | GetTelegrafsDefaultResult\n\ninterface GetTelegrafsOKResult {\n status: 200\n headers: Headers\n data: Telegrafs\n}\n\ninterface GetTelegrafsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegrafs = (\n params: GetTelegrafsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/telegrafs',\n params,\n options\n ) as Promise\n\nexport interface PostTelegrafParams {\n data: TelegrafPluginRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTelegrafResult = PostTelegrafCreatedResult | PostTelegrafDefaultResult\n\ninterface PostTelegrafCreatedResult {\n status: 201\n headers: Headers\n data: Telegraf\n}\n\ninterface PostTelegrafDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTelegraf = (\n params: PostTelegrafParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/telegrafs',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetTelegrafParams {\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n Accept?: string\n }\n}\n\ntype GetTelegrafResult = GetTelegrafOKResult | GetTelegrafDefaultResult\n\ninterface GetTelegrafOKResult {\n status: 200\n headers: Headers\n data: Telegraf\n}\n\ninterface GetTelegrafDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegraf = (\n params: GetTelegrafParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/telegrafs/${params.telegrafID}`,\n params,\n options\n ) as Promise\n\nexport interface PutTelegrafParams {\n telegrafID: string\n\n data: TelegrafPluginRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutTelegrafResult = PutTelegrafOKResult | PutTelegrafDefaultResult\n\ninterface PutTelegrafOKResult {\n status: 200\n headers: Headers\n data: Telegraf\n}\n\ninterface PutTelegrafDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putTelegraf = (\n params: PutTelegrafParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/telegrafs/${params.telegrafID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTelegrafParams {\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTelegrafResult =\n | DeleteTelegrafNoContentResult\n | DeleteTelegrafDefaultResult\n\ninterface DeleteTelegrafNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTelegrafDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTelegraf = (\n params: DeleteTelegrafParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/telegrafs/${params.telegrafID}`,\n params,\n options\n ) as Promise\n\nexport interface GetTelegrafsLabelsParams {\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTelegrafsLabelsResult =\n | GetTelegrafsLabelsOKResult\n | GetTelegrafsLabelsDefaultResult\n\ninterface GetTelegrafsLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetTelegrafsLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegrafsLabels = (\n params: GetTelegrafsLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/telegrafs/${params.telegrafID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostTelegrafsLabelParams {\n telegrafID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTelegrafsLabelResult =\n | PostTelegrafsLabelCreatedResult\n | PostTelegrafsLabelDefaultResult\n\ninterface PostTelegrafsLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostTelegrafsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTelegrafsLabel = (\n params: PostTelegrafsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/telegrafs/${params.telegrafID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTelegrafsLabelParams {\n telegrafID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTelegrafsLabelResult =\n | DeleteTelegrafsLabelNoContentResult\n | DeleteTelegrafsLabelNotFoundResult\n | DeleteTelegrafsLabelDefaultResult\n\ninterface DeleteTelegrafsLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTelegrafsLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteTelegrafsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTelegrafsLabel = (\n params: DeleteTelegrafsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/telegrafs/${params.telegrafID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetTelegrafsMembersParams {\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTelegrafsMembersResult =\n | GetTelegrafsMembersOKResult\n | GetTelegrafsMembersDefaultResult\n\ninterface GetTelegrafsMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetTelegrafsMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegrafsMembers = (\n params: GetTelegrafsMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/telegrafs/${params.telegrafID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostTelegrafsMemberParams {\n telegrafID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTelegrafsMemberResult =\n | PostTelegrafsMemberCreatedResult\n | PostTelegrafsMemberDefaultResult\n\ninterface PostTelegrafsMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostTelegrafsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTelegrafsMember = (\n params: PostTelegrafsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/telegrafs/${params.telegrafID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTelegrafsMemberParams {\n userID: string\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTelegrafsMemberResult =\n | DeleteTelegrafsMemberNoContentResult\n | DeleteTelegrafsMemberDefaultResult\n\ninterface DeleteTelegrafsMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTelegrafsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTelegrafsMember = (\n params: DeleteTelegrafsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/telegrafs/${params.telegrafID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetTelegrafsOwnersParams {\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTelegrafsOwnersResult =\n | GetTelegrafsOwnersOKResult\n | GetTelegrafsOwnersDefaultResult\n\ninterface GetTelegrafsOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetTelegrafsOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTelegrafsOwners = (\n params: GetTelegrafsOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/telegrafs/${params.telegrafID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostTelegrafsOwnerParams {\n telegrafID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTelegrafsOwnerResult =\n | PostTelegrafsOwnerCreatedResult\n | PostTelegrafsOwnerDefaultResult\n\ninterface PostTelegrafsOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostTelegrafsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTelegrafsOwner = (\n params: PostTelegrafsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/telegrafs/${params.telegrafID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTelegrafsOwnerParams {\n userID: string\n telegrafID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTelegrafsOwnerResult =\n | DeleteTelegrafsOwnerNoContentResult\n | DeleteTelegrafsOwnerDefaultResult\n\ninterface DeleteTelegrafsOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTelegrafsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTelegrafsOwner = (\n params: DeleteTelegrafsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/telegrafs/${params.telegrafID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetVariablesLabelsParams {\n variableID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetVariablesLabelsResult =\n | GetVariablesLabelsOKResult\n | GetVariablesLabelsDefaultResult\n\ninterface GetVariablesLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetVariablesLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getVariablesLabels = (\n params: GetVariablesLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/variables/${params.variableID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostVariablesLabelParams {\n variableID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostVariablesLabelResult =\n | PostVariablesLabelCreatedResult\n | PostVariablesLabelDefaultResult\n\ninterface PostVariablesLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostVariablesLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postVariablesLabel = (\n params: PostVariablesLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/variables/${params.variableID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteVariablesLabelParams {\n variableID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteVariablesLabelResult =\n | DeleteVariablesLabelNoContentResult\n | DeleteVariablesLabelNotFoundResult\n | DeleteVariablesLabelDefaultResult\n\ninterface DeleteVariablesLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteVariablesLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteVariablesLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteVariablesLabel = (\n params: DeleteVariablesLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/variables/${params.variableID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface PostWriteParams {\n data: string\n\n query: {\n org: string\n orgID?: string\n bucket: string\n precision?: any\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Encoding'?: string\n 'Content-Type'?: string\n 'Content-Length'?: number\n Accept?: string\n }\n}\n\ntype PostWriteResult =\n | PostWriteNoContentResult\n | PostWriteBadRequestResult\n | PostWriteUnauthorizedResult\n | PostWriteNotFoundResult\n | PostWritePayloadTooLargeResult\n | PostWriteTooManyRequestsResult\n | PostWriteInternalServerErrorResult\n | PostWriteServiceUnavailableResult\n | PostWriteDefaultResult\n\ninterface PostWriteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostWriteBadRequestResult {\n status: 400\n headers: Headers\n data: LineProtocolError\n}\n\ninterface PostWriteUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostWriteNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostWritePayloadTooLargeResult {\n status: 413\n headers: Headers\n data: LineProtocolLengthError\n}\n\ninterface PostWriteTooManyRequestsResult {\n status: 429\n headers: Headers\n data: any\n}\n\ninterface PostWriteInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostWriteServiceUnavailableResult {\n status: 503\n headers: Headers\n data: any\n}\n\ninterface PostWriteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postWrite = (\n params: PostWriteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/write',\n {...params, headers: {...params.headers, 'Content-Type': 'text/plain'}},\n options\n ) as Promise\n\nexport interface PostDeleteParams {\n data: DeletePredicateRequest\n\n query?: {\n org?: string\n bucket?: string\n orgID?: string\n bucketID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDeleteResult =\n | PostDeleteNoContentResult\n | PostDeleteBadRequestResult\n | PostDeleteUnauthorizedResult\n | PostDeleteNotFoundResult\n | PostDeleteInternalServerErrorResult\n | PostDeleteDefaultResult\n\ninterface PostDeleteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostDeleteBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostDeleteUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostDeleteNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostDeleteInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostDeleteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDelete = (\n params: PostDeleteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/delete',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetLabelsParams {\n query?: {\n orgID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetLabelsResult =\n | GetLabelsOKResult\n | GetLabelsInternalServerErrorResult\n | GetLabelsDefaultResult\n\ninterface GetLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetLabelsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getLabels = (\n params: GetLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/labels', params, options) as Promise\n\nexport interface PostLabelParams {\n data: LabelCreateRequest\n}\n\ntype PostLabelResult =\n | PostLabelCreatedResult\n | PostLabelInternalServerErrorResult\n | PostLabelDefaultResult\n\ninterface PostLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postLabel = (\n params: PostLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/labels',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetLabelParams {\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetLabelResult =\n | GetLabelOKResult\n | GetLabelInternalServerErrorResult\n | GetLabelDefaultResult\n\ninterface GetLabelOKResult {\n status: 200\n headers: Headers\n data: LabelResponse\n}\n\ninterface GetLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getLabel = (\n params: GetLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchLabelParams {\n labelID: string\n\n data: LabelUpdate\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchLabelResult =\n | PatchLabelOKResult\n | PatchLabelUnauthorizedResult\n | PatchLabelNotFoundResult\n | PatchLabelInternalServerErrorResult\n | PatchLabelDefaultResult\n\ninterface PatchLabelOKResult {\n status: 200\n headers: Headers\n data: LabelResponse\n}\n\ninterface PatchLabelUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PatchLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PatchLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchLabel = (\n params: PatchLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/labels/${params.labelID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteLabelParams {\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteLabelResult =\n | DeleteLabelNoContentResult\n | DeleteLabelUnauthorizedResult\n | DeleteLabelNotFoundResult\n | DeleteLabelInternalServerErrorResult\n | DeleteLabelDefaultResult\n\ninterface DeleteLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteLabelUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteLabel = (\n params: DeleteLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetDashboardParams {\n dashboardID: string\n\n query?: {\n include?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardResult =\n | GetDashboardOKResult\n | GetDashboardNotFoundResult\n | GetDashboardDefaultResult\n\ninterface GetDashboardOKResult {\n status: 200\n headers: Headers\n data: Dashboard | DashboardWithViewProperties\n}\n\ninterface GetDashboardNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetDashboardDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboard = (\n params: GetDashboardParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dashboards/${params.dashboardID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchDashboardParams {\n dashboardID: string\n\n data: {\n name?: string\n description?: string\n cells?: CellWithViewProperties\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchDashboardResult =\n | PatchDashboardOKResult\n | PatchDashboardNotFoundResult\n | PatchDashboardDefaultResult\n\ninterface PatchDashboardOKResult {\n status: 200\n headers: Headers\n data: Dashboard\n}\n\ninterface PatchDashboardNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchDashboardDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchDashboard = (\n params: PatchDashboardParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/dashboards/${params.dashboardID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDashboardParams {\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDashboardResult =\n | DeleteDashboardNoContentResult\n | DeleteDashboardNotFoundResult\n | DeleteDashboardDefaultResult\n\ninterface DeleteDashboardNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDashboardNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteDashboardDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDashboard = (\n params: DeleteDashboardParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dashboards/${params.dashboardID}`,\n params,\n options\n ) as Promise\n\nexport interface PostDashboardsCellParams {\n dashboardID: string\n\n data: CreateCell\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDashboardsCellResult =\n | PostDashboardsCellCreatedResult\n | PostDashboardsCellNotFoundResult\n | PostDashboardsCellDefaultResult\n\ninterface PostDashboardsCellCreatedResult {\n status: 201\n headers: Headers\n data: Cell\n}\n\ninterface PostDashboardsCellNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostDashboardsCellDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDashboardsCell = (\n params: PostDashboardsCellParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/dashboards/${params.dashboardID}/cells`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PutDashboardsCellsParams {\n dashboardID: string\n\n data: Cells\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutDashboardsCellsResult =\n | PutDashboardsCellsCreatedResult\n | PutDashboardsCellsNotFoundResult\n | PutDashboardsCellsDefaultResult\n\ninterface PutDashboardsCellsCreatedResult {\n status: 201\n headers: Headers\n data: Dashboard\n}\n\ninterface PutDashboardsCellsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutDashboardsCellsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putDashboardsCells = (\n params: PutDashboardsCellsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/dashboards/${params.dashboardID}/cells`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PatchDashboardsCellParams {\n dashboardID: string\n cellID: string\n\n data: CellUpdate\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchDashboardsCellResult =\n | PatchDashboardsCellOKResult\n | PatchDashboardsCellNotFoundResult\n | PatchDashboardsCellDefaultResult\n\ninterface PatchDashboardsCellOKResult {\n status: 200\n headers: Headers\n data: Cell\n}\n\ninterface PatchDashboardsCellNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchDashboardsCellDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchDashboardsCell = (\n params: PatchDashboardsCellParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/dashboards/${params.dashboardID}/cells/${params.cellID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDashboardsCellParams {\n dashboardID: string\n cellID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDashboardsCellResult =\n | DeleteDashboardsCellNoContentResult\n | DeleteDashboardsCellNotFoundResult\n | DeleteDashboardsCellDefaultResult\n\ninterface DeleteDashboardsCellNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDashboardsCellNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteDashboardsCellDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDashboardsCell = (\n params: DeleteDashboardsCellParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dashboards/${params.dashboardID}/cells/${params.cellID}`,\n params,\n options\n ) as Promise\n\nexport interface GetDashboardsCellsViewParams {\n dashboardID: string\n cellID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardsCellsViewResult =\n | GetDashboardsCellsViewOKResult\n | GetDashboardsCellsViewNotFoundResult\n | GetDashboardsCellsViewDefaultResult\n\ninterface GetDashboardsCellsViewOKResult {\n status: 200\n headers: Headers\n data: View\n}\n\ninterface GetDashboardsCellsViewNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetDashboardsCellsViewDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboardsCellsView = (\n params: GetDashboardsCellsViewParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dashboards/${params.dashboardID}/cells/${params.cellID}/view`,\n params,\n options\n ) as Promise\n\nexport interface PatchDashboardsCellsViewParams {\n dashboardID: string\n cellID: string\n\n data: View\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchDashboardsCellsViewResult =\n | PatchDashboardsCellsViewOKResult\n | PatchDashboardsCellsViewNotFoundResult\n | PatchDashboardsCellsViewDefaultResult\n\ninterface PatchDashboardsCellsViewOKResult {\n status: 200\n headers: Headers\n data: View\n}\n\ninterface PatchDashboardsCellsViewNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchDashboardsCellsViewDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchDashboardsCellsView = (\n params: PatchDashboardsCellsViewParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/dashboards/${params.dashboardID}/cells/${params.cellID}/view`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetDashboardsLabelsParams {\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardsLabelsResult =\n | GetDashboardsLabelsOKResult\n | GetDashboardsLabelsDefaultResult\n\ninterface GetDashboardsLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetDashboardsLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboardsLabels = (\n params: GetDashboardsLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dashboards/${params.dashboardID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostDashboardsLabelParams {\n dashboardID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDashboardsLabelResult =\n | PostDashboardsLabelCreatedResult\n | PostDashboardsLabelDefaultResult\n\ninterface PostDashboardsLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostDashboardsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDashboardsLabel = (\n params: PostDashboardsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/dashboards/${params.dashboardID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDashboardsLabelParams {\n dashboardID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDashboardsLabelResult =\n | DeleteDashboardsLabelNoContentResult\n | DeleteDashboardsLabelNotFoundResult\n | DeleteDashboardsLabelDefaultResult\n\ninterface DeleteDashboardsLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDashboardsLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteDashboardsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDashboardsLabel = (\n params: DeleteDashboardsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dashboards/${params.dashboardID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetDashboardsMembersParams {\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardsMembersResult =\n | GetDashboardsMembersOKResult\n | GetDashboardsMembersDefaultResult\n\ninterface GetDashboardsMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetDashboardsMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboardsMembers = (\n params: GetDashboardsMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dashboards/${params.dashboardID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostDashboardsMemberParams {\n dashboardID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDashboardsMemberResult =\n | PostDashboardsMemberCreatedResult\n | PostDashboardsMemberDefaultResult\n\ninterface PostDashboardsMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostDashboardsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDashboardsMember = (\n params: PostDashboardsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/dashboards/${params.dashboardID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDashboardsMemberParams {\n userID: string\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDashboardsMemberResult =\n | DeleteDashboardsMemberNoContentResult\n | DeleteDashboardsMemberDefaultResult\n\ninterface DeleteDashboardsMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDashboardsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDashboardsMember = (\n params: DeleteDashboardsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dashboards/${params.dashboardID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetDashboardsOwnersParams {\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardsOwnersResult =\n | GetDashboardsOwnersOKResult\n | GetDashboardsOwnersDefaultResult\n\ninterface GetDashboardsOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetDashboardsOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboardsOwners = (\n params: GetDashboardsOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/dashboards/${params.dashboardID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostDashboardsOwnerParams {\n dashboardID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDashboardsOwnerResult =\n | PostDashboardsOwnerCreatedResult\n | PostDashboardsOwnerDefaultResult\n\ninterface PostDashboardsOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostDashboardsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDashboardsOwner = (\n params: PostDashboardsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/dashboards/${params.dashboardID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteDashboardsOwnerParams {\n userID: string\n dashboardID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteDashboardsOwnerResult =\n | DeleteDashboardsOwnerNoContentResult\n | DeleteDashboardsOwnerDefaultResult\n\ninterface DeleteDashboardsOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteDashboardsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteDashboardsOwner = (\n params: DeleteDashboardsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/dashboards/${params.dashboardID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface PostQueryAstParams {\n data?: LanguageRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostQueryAstResult =\n | PostQueryAstOKResult\n | PostQueryAstBadRequestResult\n | PostQueryAstDefaultResult\n\ninterface PostQueryAstOKResult {\n status: 200\n headers: Headers\n data: ASTResponse\n}\n\ninterface PostQueryAstBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostQueryAstDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postQueryAst = (\n params: PostQueryAstParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/query/ast',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetQuerySuggestionsParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetQuerySuggestionsResult =\n | GetQuerySuggestionsOKResult\n | GetQuerySuggestionsMovedPermanentlyResult\n | GetQuerySuggestionsDefaultResult\n\ninterface GetQuerySuggestionsOKResult {\n status: 200\n headers: Headers\n data: FluxSuggestions\n}\n\ninterface GetQuerySuggestionsMovedPermanentlyResult {\n status: 301\n headers: Headers\n data: {\n readonly body?: string\n }\n}\n\ninterface GetQuerySuggestionsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getQuerySuggestions = (\n params: GetQuerySuggestionsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/query/suggestions',\n params,\n options\n ) as Promise\n\nexport interface GetQuerySuggestionParams {\n name: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetQuerySuggestionResult =\n | GetQuerySuggestionOKResult\n | GetQuerySuggestionInternalServerErrorResult\n\ninterface GetQuerySuggestionOKResult {\n status: 200\n headers: Headers\n data: FluxSuggestion\n}\n\ninterface GetQuerySuggestionInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getQuerySuggestion = (\n params: GetQuerySuggestionParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/query/suggestions/${params.name}`,\n params,\n options\n ) as Promise\n\nexport interface PostQueryAnalyzeParams {\n data?: Query\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostQueryAnalyzeResult =\n | PostQueryAnalyzeOKResult\n | PostQueryAnalyzeBadRequestResult\n | PostQueryAnalyzeDefaultResult\n\ninterface PostQueryAnalyzeOKResult {\n status: 200\n headers: Headers\n data: AnalyzeQueryResponse\n}\n\ninterface PostQueryAnalyzeBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostQueryAnalyzeDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postQueryAnalyze = (\n params: PostQueryAnalyzeParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/query/analyze',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PostQueryParams {\n data?: Query\n\n query?: {\n org?: string\n orgID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Accept-Encoding'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostQueryResult =\n | PostQueryOKResult\n | PostQueryBadRequestResult\n | PostQueryUnauthorizedResult\n | PostQueryNotFoundResult\n | PostQueryTooManyRequestsResult\n | PostQueryInternalServerErrorResult\n | PostQueryDefaultResult\n\ninterface PostQueryOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface PostQueryBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostQueryUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostQueryNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostQueryTooManyRequestsResult {\n status: 429\n headers: Headers\n data: any\n}\n\ninterface PostQueryInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostQueryDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postQuery = (\n params: PostQueryParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/query',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetBucketsParams {\n query?: {\n offset?: number\n limit?: number\n after?: string\n org?: string\n orgID?: string\n name?: string\n id?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBucketsResult =\n | GetBucketsOKResult\n | GetBucketsUnauthorizedResult\n | GetBucketsInternalServerErrorResult\n | GetBucketsDefaultResult\n\ninterface GetBucketsOKResult {\n status: 200\n headers: Headers\n data: Buckets\n}\n\ninterface GetBucketsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBuckets = (\n params: GetBucketsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/buckets',\n params,\n options\n ) as Promise\n\nexport interface PostBucketParams {\n data: PostBucketRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostBucketResult =\n | PostBucketCreatedResult\n | PostBucketBadRequestResult\n | PostBucketUnauthorizedResult\n | PostBucketForbiddenResult\n | PostBucketUnprocessableEntityResult\n | PostBucketInternalServerErrorResult\n | PostBucketDefaultResult\n\ninterface PostBucketCreatedResult {\n status: 201\n headers: Headers\n data: Bucket\n}\n\ninterface PostBucketBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostBucketUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostBucketForbiddenResult {\n status: 403\n headers: Headers\n data: Error\n}\n\ninterface PostBucketUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostBucketInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostBucketDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postBucket = (\n params: PostBucketParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/buckets',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetBucketParams {\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBucketResult =\n | GetBucketOKResult\n | GetBucketUnauthorizedResult\n | GetBucketNotFoundResult\n | GetBucketInternalServerErrorResult\n | GetBucketDefaultResult\n\ninterface GetBucketOKResult {\n status: 200\n headers: Headers\n data: Bucket\n}\n\ninterface GetBucketUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBucketNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetBucketInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetBucketDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBucket = (\n params: GetBucketParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/buckets/${params.bucketID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchBucketParams {\n bucketID: string\n\n data: PatchBucketRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchBucketResult =\n | PatchBucketOKResult\n | PatchBucketBadRequestResult\n | PatchBucketUnauthorizedResult\n | PatchBucketForbiddenResult\n | PatchBucketNotFoundResult\n | PatchBucketInternalServerErrorResult\n | PatchBucketDefaultResult\n\ninterface PatchBucketOKResult {\n status: 200\n headers: Headers\n data: Bucket\n}\n\ninterface PatchBucketBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchBucketUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PatchBucketForbiddenResult {\n status: 403\n headers: Headers\n data: Error\n}\n\ninterface PatchBucketNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchBucketInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PatchBucketDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchBucket = (\n params: PatchBucketParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/buckets/${params.bucketID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteBucketParams {\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteBucketResult =\n | DeleteBucketNoContentResult\n | DeleteBucketBadRequestResult\n | DeleteBucketUnauthorizedResult\n | DeleteBucketNotFoundResult\n | DeleteBucketInternalServerErrorResult\n | DeleteBucketDefaultResult\n\ninterface DeleteBucketNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteBucketBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteBucket = (\n params: DeleteBucketParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/buckets/${params.bucketID}`,\n params,\n options\n ) as Promise\n\nexport interface GetBucketsLabelsParams {\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBucketsLabelsResult =\n | GetBucketsLabelsOKResult\n | GetBucketsLabelsBadRequestResult\n | GetBucketsLabelsUnauthorizedResult\n | GetBucketsLabelsNotFoundResult\n | GetBucketsLabelsInternalServerErrorResult\n | GetBucketsLabelsDefaultResult\n\ninterface GetBucketsLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetBucketsLabelsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsLabelsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsLabelsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsLabelsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBucketsLabels = (\n params: GetBucketsLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/buckets/${params.bucketID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostBucketsLabelParams {\n bucketID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostBucketsLabelResult =\n | PostBucketsLabelCreatedResult\n | PostBucketsLabelBadRequestResult\n | PostBucketsLabelUnauthorizedResult\n | PostBucketsLabelNotFoundResult\n | PostBucketsLabelUnprocessableEntityResult\n | PostBucketsLabelInternalServerErrorResult\n | PostBucketsLabelDefaultResult\n\ninterface PostBucketsLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostBucketsLabelBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsLabelUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsLabelUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postBucketsLabel = (\n params: PostBucketsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/buckets/${params.bucketID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteBucketsLabelParams {\n bucketID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteBucketsLabelResult =\n | DeleteBucketsLabelNoContentResult\n | DeleteBucketsLabelNotFoundResult\n | DeleteBucketsLabelDefaultResult\n\ninterface DeleteBucketsLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteBucketsLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteBucketsLabel = (\n params: DeleteBucketsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/buckets/${params.bucketID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetBucketsMembersParams {\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBucketsMembersResult =\n | GetBucketsMembersOKResult\n | GetBucketsMembersBadRequestResult\n | GetBucketsMembersUnauthorizedResult\n | GetBucketsMembersNotFoundResult\n | GetBucketsMembersInternalServerErrorResult\n | GetBucketsMembersDefaultResult\n\ninterface GetBucketsMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetBucketsMembersBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsMembersUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsMembersNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsMembersInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetBucketsMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBucketsMembers = (\n params: GetBucketsMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/buckets/${params.bucketID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostBucketsMemberParams {\n bucketID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostBucketsMemberResult =\n | PostBucketsMemberCreatedResult\n | PostBucketsMemberBadRequestResult\n | PostBucketsMemberUnauthorizedResult\n | PostBucketsMemberNotFoundResult\n | PostBucketsMemberInternalServerErrorResult\n | PostBucketsMemberDefaultResult\n\ninterface PostBucketsMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostBucketsMemberBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsMemberUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsMemberNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsMemberInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostBucketsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postBucketsMember = (\n params: PostBucketsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/buckets/${params.bucketID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteBucketsMemberParams {\n userID: string\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteBucketsMemberResult =\n | DeleteBucketsMemberNoContentResult\n | DeleteBucketsMemberUnauthorizedResult\n | DeleteBucketsMemberNotFoundResult\n | DeleteBucketsMemberInternalServerErrorResult\n | DeleteBucketsMemberDefaultResult\n\ninterface DeleteBucketsMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteBucketsMemberUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketsMemberNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketsMemberInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteBucketsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteBucketsMember = (\n params: DeleteBucketsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/buckets/${params.bucketID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetBucketsOwnersParams {\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBucketsOwnersResult =\n | GetBucketsOwnersOKResult\n | GetBucketsOwnersDefaultResult\n\ninterface GetBucketsOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetBucketsOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBucketsOwners = (\n params: GetBucketsOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/buckets/${params.bucketID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostBucketsOwnerParams {\n bucketID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostBucketsOwnerResult =\n | PostBucketsOwnerCreatedResult\n | PostBucketsOwnerDefaultResult\n\ninterface PostBucketsOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostBucketsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postBucketsOwner = (\n params: PostBucketsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/buckets/${params.bucketID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteBucketsOwnerParams {\n userID: string\n bucketID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteBucketsOwnerResult =\n | DeleteBucketsOwnerNoContentResult\n | DeleteBucketsOwnerDefaultResult\n\ninterface DeleteBucketsOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteBucketsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteBucketsOwner = (\n params: DeleteBucketsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/buckets/${params.bucketID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetOrgsParams {\n query?: {\n offset?: number\n limit?: number\n descending?: any\n org?: string\n orgID?: string\n userID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetOrgsResult = GetOrgsOKResult | GetOrgsDefaultResult\n\ninterface GetOrgsOKResult {\n status: 200\n headers: Headers\n data: Organizations\n}\n\ninterface GetOrgsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgs = (\n params: GetOrgsParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/orgs', params, options) as Promise\n\nexport interface PostOrgParams {\n data: PostOrganizationRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostOrgResult = PostOrgCreatedResult | PostOrgDefaultResult\n\ninterface PostOrgCreatedResult {\n status: 201\n headers: Headers\n data: Organization\n}\n\ninterface PostOrgDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postOrg = (\n params: PostOrgParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/orgs',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetOrgParams {\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetOrgResult = GetOrgOKResult | GetOrgDefaultResult\n\ninterface GetOrgOKResult {\n status: 200\n headers: Headers\n data: Organization\n}\n\ninterface GetOrgDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrg = (\n params: GetOrgParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/orgs/${params.orgID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchOrgParams {\n orgID: string\n\n data: PatchOrganizationRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchOrgResult = PatchOrgOKResult | PatchOrgDefaultResult\n\ninterface PatchOrgOKResult {\n status: 200\n headers: Headers\n data: Organization\n}\n\ninterface PatchOrgDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchOrg = (\n params: PatchOrgParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/orgs/${params.orgID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteOrgParams {\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteOrgResult =\n | DeleteOrgNoContentResult\n | DeleteOrgNotFoundResult\n | DeleteOrgDefaultResult\n\ninterface DeleteOrgNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteOrgNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteOrgDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteOrg = (\n params: DeleteOrgParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/orgs/${params.orgID}`,\n params,\n options\n ) as Promise\n\nexport interface GetOrgsSecretsParams {\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetOrgsSecretsResult = GetOrgsSecretsOKResult | GetOrgsSecretsDefaultResult\n\ninterface GetOrgsSecretsOKResult {\n status: 200\n headers: Headers\n data: SecretKeysResponse\n}\n\ninterface GetOrgsSecretsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsSecrets = (\n params: GetOrgsSecretsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/orgs/${params.orgID}/secrets`,\n params,\n options\n ) as Promise\n\nexport interface PatchOrgsSecretsParams {\n orgID: string\n\n data: Secrets\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchOrgsSecretsResult =\n | PatchOrgsSecretsNoContentResult\n | PatchOrgsSecretsDefaultResult\n\ninterface PatchOrgsSecretsNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PatchOrgsSecretsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchOrgsSecrets = (\n params: PatchOrgsSecretsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/orgs/${params.orgID}/secrets`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetOrgsMembersParams {\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetOrgsMembersResult =\n | GetOrgsMembersOKResult\n | GetOrgsMembersNotFoundResult\n | GetOrgsMembersDefaultResult\n\ninterface GetOrgsMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetOrgsMembersNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetOrgsMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsMembers = (\n params: GetOrgsMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/orgs/${params.orgID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostOrgsMemberParams {\n orgID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostOrgsMemberResult =\n | PostOrgsMemberCreatedResult\n | PostOrgsMemberDefaultResult\n\ninterface PostOrgsMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostOrgsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postOrgsMember = (\n params: PostOrgsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/orgs/${params.orgID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteOrgsMemberParams {\n userID: string\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteOrgsMemberResult =\n | DeleteOrgsMemberNoContentResult\n | DeleteOrgsMemberDefaultResult\n\ninterface DeleteOrgsMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteOrgsMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteOrgsMember = (\n params: DeleteOrgsMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/orgs/${params.orgID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetOrgsOwnersParams {\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetOrgsOwnersResult =\n | GetOrgsOwnersOKResult\n | GetOrgsOwnersNotFoundResult\n | GetOrgsOwnersDefaultResult\n\ninterface GetOrgsOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetOrgsOwnersNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetOrgsOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsOwners = (\n params: GetOrgsOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/orgs/${params.orgID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostOrgsOwnerParams {\n orgID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostOrgsOwnerResult =\n | PostOrgsOwnerCreatedResult\n | PostOrgsOwnerDefaultResult\n\ninterface PostOrgsOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostOrgsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postOrgsOwner = (\n params: PostOrgsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/orgs/${params.orgID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteOrgsOwnerParams {\n userID: string\n orgID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteOrgsOwnerResult =\n | DeleteOrgsOwnerNoContentResult\n | DeleteOrgsOwnerDefaultResult\n\ninterface DeleteOrgsOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteOrgsOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteOrgsOwner = (\n params: DeleteOrgsOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/orgs/${params.orgID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface PostOrgsSecretsDeleteParams {\n orgID: string\n\n data: SecretKeys\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostOrgsSecretsDeleteResult =\n | PostOrgsSecretsDeleteNoContentResult\n | PostOrgsSecretsDeleteDefaultResult\n\ninterface PostOrgsSecretsDeleteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostOrgsSecretsDeleteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postOrgsSecretsDelete = (\n params: PostOrgsSecretsDeleteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/orgs/${params.orgID}/secrets/delete`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteOrgsSecretParams {\n orgID: string\n secretID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteOrgsSecretResult =\n | DeleteOrgsSecretNoContentResult\n | DeleteOrgsSecretDefaultResult\n\ninterface DeleteOrgsSecretNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteOrgsSecretDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteOrgsSecret = (\n params: DeleteOrgsSecretParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/orgs/${params.orgID}/secrets/${params.secretID}`,\n params,\n options\n ) as Promise\n\nexport interface GetResourcesParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetResourcesResult = GetResourcesOKResult | GetResourcesDefaultResult\n\ninterface GetResourcesOKResult {\n status: 200\n headers: Headers\n data: string[]\n}\n\ninterface GetResourcesDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getResources = (\n params: GetResourcesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/resources',\n params,\n options\n ) as Promise\n\nexport interface GetStacksParams {\n query: {\n orgID: string\n name?: string\n stackID?: string\n }\n}\n\ntype GetStacksResult =\n | GetStacksOKResult\n | GetStacksBadRequestResult\n | GetStacksUnauthorizedResult\n | GetStacksInternalServerErrorResult\n | GetStacksDefaultResult\n\ninterface GetStacksOKResult {\n status: 200\n headers: Headers\n data: {\n stacks?: Stack[]\n }\n}\n\ninterface GetStacksBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetStacksUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetStacksInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetStacksDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getStacks = (\n params: GetStacksParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/stacks', params, options) as Promise\n\nexport interface PostStackParams {\n data: {\n orgID?: string\n name?: string\n description?: string\n urls?: string[]\n }\n}\n\ntype PostStackResult =\n | PostStackCreatedResult\n | PostStackUnauthorizedResult\n | PostStackUnprocessableEntityResult\n | PostStackInternalServerErrorResult\n | PostStackDefaultResult\n\ninterface PostStackCreatedResult {\n status: 201\n headers: Headers\n data: Stack\n}\n\ninterface PostStackUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostStackUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostStackInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostStackDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postStack = (\n params: PostStackParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/stacks',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetStackParams {\n stack_id: string\n}\n\ntype GetStackResult = GetStackOKResult | GetStackDefaultResult\n\ninterface GetStackOKResult {\n status: 200\n headers: Headers\n data: Stack\n}\n\ninterface GetStackDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getStack = (\n params: GetStackParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/stacks/${params.stack_id}`,\n params,\n options\n ) as Promise\n\nexport interface PatchStackParams {\n stack_id: string\n\n data: {\n name?: string\n description?: string\n templateURLs?: string[]\n additionalResources?: Array<{\n resourceID: string\n kind: string\n templateMetaName?: string\n }>\n }\n}\n\ntype PatchStackResult = PatchStackOKResult | PatchStackDefaultResult\n\ninterface PatchStackOKResult {\n status: 200\n headers: Headers\n data: Stack\n}\n\ninterface PatchStackDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchStack = (\n params: PatchStackParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/stacks/${params.stack_id}`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface DeleteStackParams {\n stack_id: string\n\n query: {\n orgID: string\n }\n}\n\ntype DeleteStackResult = DeleteStackNoContentResult | DeleteStackDefaultResult\n\ninterface DeleteStackNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteStackDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteStack = (\n params: DeleteStackParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/stacks/${params.stack_id}`,\n params,\n options\n ) as Promise\n\nexport interface PostStacksUninstallParams {\n stack_id: string\n}\n\ntype PostStacksUninstallResult =\n | PostStacksUninstallOKResult\n | PostStacksUninstallDefaultResult\n\ninterface PostStacksUninstallOKResult {\n status: 200\n headers: Headers\n data: Stack\n}\n\ninterface PostStacksUninstallDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postStacksUninstall = (\n params: PostStacksUninstallParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/stacks/${params.stack_id}/uninstall`,\n params,\n options\n ) as Promise\n\nexport interface PostTemplatesApplyParams {\n data: TemplateApply\n}\n\ntype PostTemplatesApplyResult =\n | PostTemplatesApplyOKResult\n | PostTemplatesApplyCreatedResult\n | PostTemplatesApplyUnprocessableEntityResult\n | PostTemplatesApplyInternalServerErrorResult\n | PostTemplatesApplyDefaultResult\n\ninterface PostTemplatesApplyOKResult {\n status: 200\n headers: Headers\n data: TemplateSummary\n}\n\ninterface PostTemplatesApplyCreatedResult {\n status: 201\n headers: Headers\n data: TemplateSummary\n}\n\ninterface PostTemplatesApplyUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: TemplateSummary & {\n message: string\n code: string\n }\n}\n\ninterface PostTemplatesApplyInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTemplatesApplyDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTemplatesApply = (\n params: PostTemplatesApplyParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/templates/apply',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostTemplatesExportParams {\n data?: TemplateExportByID | TemplateExportByName\n}\n\ntype PostTemplatesExportResult =\n | PostTemplatesExportOKResult\n | PostTemplatesExportDefaultResult\n\ninterface PostTemplatesExportOKResult {\n status: 200\n headers: Headers\n data: Template\n}\n\ninterface PostTemplatesExportDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTemplatesExport = (\n params: PostTemplatesExportParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/templates/export',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetTasksRunsParams {\n taskID: string\n\n query?: {\n after?: string\n limit?: number\n afterTime?: string\n beforeTime?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksRunsResult =\n | GetTasksRunsOKResult\n | GetTasksRunsUnauthorizedResult\n | GetTasksRunsInternalServerErrorResult\n | GetTasksRunsDefaultResult\n\ninterface GetTasksRunsOKResult {\n status: 200\n headers: Headers\n data: Runs\n}\n\ninterface GetTasksRunsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksRuns = (\n params: GetTasksRunsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/runs`,\n params,\n options\n ) as Promise\n\nexport interface PostTasksRunParams {\n taskID: string\n\n data?: RunManually\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTasksRunResult =\n | PostTasksRunCreatedResult\n | PostTasksRunUnauthorizedResult\n | PostTasksRunInternalServerErrorResult\n | PostTasksRunDefaultResult\n\ninterface PostTasksRunCreatedResult {\n status: 201\n headers: Headers\n data: Run\n}\n\ninterface PostTasksRunUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTasksRun = (\n params: PostTasksRunParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/tasks/${params.taskID}/runs`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetTasksRunParams {\n taskID: string\n runID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksRunResult =\n | GetTasksRunOKResult\n | GetTasksRunBadRequestResult\n | GetTasksRunUnauthorizedResult\n | GetTasksRunNotFoundResult\n | GetTasksRunInternalServerErrorResult\n | GetTasksRunDefaultResult\n\ninterface GetTasksRunOKResult {\n status: 200\n headers: Headers\n data: Run\n}\n\ninterface GetTasksRunBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksRun = (\n params: GetTasksRunParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/runs/${params.runID}`,\n params,\n options\n ) as Promise\n\nexport interface DeleteTasksRunParams {\n taskID: string\n runID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTasksRunResult =\n | DeleteTasksRunNoContentResult\n | DeleteTasksRunBadRequestResult\n | DeleteTasksRunUnauthorizedResult\n | DeleteTasksRunNotFoundResult\n | DeleteTasksRunMethodNotAllowedResult\n | DeleteTasksRunInternalServerErrorResult\n | DeleteTasksRunDefaultResult\n\ninterface DeleteTasksRunNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTasksRunBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksRunUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksRunNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksRunMethodNotAllowedResult {\n status: 405\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksRunInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksRunDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTasksRun = (\n params: DeleteTasksRunParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/tasks/${params.taskID}/runs/${params.runID}`,\n params,\n options\n ) as Promise\n\nexport interface PostTasksRunsRetryParams {\n taskID: string\n runID: string\n\n data?: any\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTasksRunsRetryResult =\n | PostTasksRunsRetryOKResult\n | PostTasksRunsRetryBadRequestResult\n | PostTasksRunsRetryUnauthorizedResult\n | PostTasksRunsRetryNotFoundResult\n | PostTasksRunsRetryInternalServerErrorResult\n | PostTasksRunsRetryDefaultResult\n\ninterface PostTasksRunsRetryOKResult {\n status: 200\n headers: Headers\n data: Run\n}\n\ninterface PostTasksRunsRetryBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunsRetryUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunsRetryNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunsRetryInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTasksRunsRetryDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTasksRunsRetry = (\n params: PostTasksRunsRetryParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/tasks/${params.taskID}/runs/${params.runID}/retry`,\n {\n ...params,\n headers: {\n ...params.headers,\n 'Content-Type': 'application/json; charset=utf-8',\n },\n },\n options\n ) as Promise\n\nexport interface GetTasksLogsParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksLogsResult =\n | GetTasksLogsOKResult\n | GetTasksLogsBadRequestResult\n | GetTasksLogsUnauthorizedResult\n | GetTasksLogsNotFoundResult\n | GetTasksLogsInternalServerErrorResult\n | GetTasksLogsDefaultResult\n\ninterface GetTasksLogsOKResult {\n status: 200\n headers: Headers\n data: Logs\n}\n\ninterface GetTasksLogsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLogsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLogsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLogsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLogsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksLogs = (\n params: GetTasksLogsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/logs`,\n params,\n options\n ) as Promise\n\nexport interface GetTasksRunsLogsParams {\n taskID: string\n runID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksRunsLogsResult =\n | GetTasksRunsLogsOKResult\n | GetTasksRunsLogsBadRequestResult\n | GetTasksRunsLogsUnauthorizedResult\n | GetTasksRunsLogsNotFoundResult\n | GetTasksRunsLogsInternalServerErrorResult\n | GetTasksRunsLogsDefaultResult\n\ninterface GetTasksRunsLogsOKResult {\n status: 200\n headers: Headers\n data: Logs\n}\n\ninterface GetTasksRunsLogsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsLogsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsLogsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsLogsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksRunsLogsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksRunsLogs = (\n params: GetTasksRunsLogsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/runs/${params.runID}/logs`,\n params,\n options\n ) as Promise\n\nexport interface GetTasksLabelsParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksLabelsResult =\n | GetTasksLabelsOKResult\n | GetTasksLabelsBadRequestResult\n | GetTasksLabelsUnauthorizedResult\n | GetTasksLabelsNotFoundResult\n | GetTasksLabelsInternalServerErrorResult\n | GetTasksLabelsDefaultResult\n\ninterface GetTasksLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetTasksLabelsBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLabelsUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLabelsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLabelsInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksLabels = (\n params: GetTasksLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostTasksLabelParams {\n taskID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTasksLabelResult =\n | PostTasksLabelCreatedResult\n | PostTasksLabelBadRequestResult\n | PostTasksLabelUnauthorizedResult\n | PostTasksLabelNotFoundResult\n | PostTasksLabelInternalServerErrorResult\n | PostTasksLabelDefaultResult\n\ninterface PostTasksLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostTasksLabelBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostTasksLabelUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostTasksLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PostTasksLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTasksLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTasksLabel = (\n params: PostTasksLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/tasks/${params.taskID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTasksLabelParams {\n taskID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTasksLabelResult =\n | DeleteTasksLabelNoContentResult\n | DeleteTasksLabelBadRequestResult\n | DeleteTasksLabelUnauthorizedResult\n | DeleteTasksLabelNotFoundResult\n | DeleteTasksLabelInternalServerErrorResult\n | DeleteTasksLabelDefaultResult\n\ninterface DeleteTasksLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTasksLabelBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksLabelUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksLabelInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteTasksLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTasksLabel = (\n params: DeleteTasksLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/tasks/${params.taskID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetFlagsParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetFlagsResult = GetFlagsOKResult | GetFlagsDefaultResult\n\ninterface GetFlagsOKResult {\n status: 200\n headers: Headers\n data: Flags\n}\n\ninterface GetFlagsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getFlags = (\n params: GetFlagsParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/flags', params, options) as Promise\n\nexport interface GetMeParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetMeResult =\n | GetMeOKResult\n | GetMeUnauthorizedResult\n | GetMeInternalServerErrorResult\n | GetMeDefaultResult\n\ninterface GetMeOKResult {\n status: 200\n headers: Headers\n data: UserResponse\n}\n\ninterface GetMeUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetMeInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetMeDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getMe = (\n params: GetMeParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/me', params, options) as Promise\n\nexport interface PutMePasswordParams {\n data: PasswordResetBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n\n auth: {\n username: string\n password: string\n }\n}\n\ntype PutMePasswordResult =\n | PutMePasswordNoContentResult\n | PutMePasswordBadRequestResult\n | PutMePasswordDefaultResult\n\ninterface PutMePasswordNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PutMePasswordBadRequestResult {\n status: 400\n headers: Headers\n data: any\n}\n\ninterface PutMePasswordDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putMePassword = (\n params: PutMePasswordParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n '/api/v2/me/password',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetTasksMembersParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksMembersResult =\n | GetTasksMembersOKResult\n | GetTasksMembersDefaultResult\n\ninterface GetTasksMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetTasksMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksMembers = (\n params: GetTasksMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostTasksMemberParams {\n taskID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTasksMemberResult =\n | PostTasksMemberCreatedResult\n | PostTasksMemberDefaultResult\n\ninterface PostTasksMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostTasksMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTasksMember = (\n params: PostTasksMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/tasks/${params.taskID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTasksMemberParams {\n userID: string\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTasksMemberResult =\n | DeleteTasksMemberNoContentResult\n | DeleteTasksMemberDefaultResult\n\ninterface DeleteTasksMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTasksMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTasksMember = (\n params: DeleteTasksMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/tasks/${params.taskID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetTasksOwnersParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksOwnersResult =\n | GetTasksOwnersOKResult\n | GetTasksOwnersUnauthorizedResult\n | GetTasksOwnersUnprocessableEntityResult\n | GetTasksOwnersInternalServerErrorResult\n | GetTasksOwnersDefaultResult\n\ninterface GetTasksOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetTasksOwnersUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksOwnersUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface GetTasksOwnersInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasksOwners = (\n params: GetTasksOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostTasksOwnerParams {\n taskID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTasksOwnerResult =\n | PostTasksOwnerCreatedResult\n | PostTasksOwnerUnauthorizedResult\n | PostTasksOwnerUnprocessableEntityResult\n | PostTasksOwnerInternalServerErrorResult\n | PostTasksOwnerDefaultResult\n\ninterface PostTasksOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostTasksOwnerUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostTasksOwnerUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostTasksOwnerInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTasksOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTasksOwner = (\n params: PostTasksOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/tasks/${params.taskID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTasksOwnerParams {\n userID: string\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTasksOwnerResult =\n | DeleteTasksOwnerNoContentResult\n | DeleteTasksOwnerDefaultResult\n\ninterface DeleteTasksOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTasksOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTasksOwner = (\n params: DeleteTasksOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/tasks/${params.taskID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface PostUsersPasswordParams {\n userID: string\n\n data: PasswordResetBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n\n auth: {\n username: string\n password: string\n }\n}\n\ntype PostUsersPasswordResult =\n | PostUsersPasswordNoContentResult\n | PostUsersPasswordBadRequestResult\n | PostUsersPasswordDefaultResult\n\ninterface PostUsersPasswordNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostUsersPasswordBadRequestResult {\n status: 400\n headers: Headers\n data: any\n}\n\ninterface PostUsersPasswordDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postUsersPassword = (\n params: PostUsersPasswordParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/users/${params.userID}/password`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetChecksParams {\n query: {\n offset?: number\n limit?: number\n orgID: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetChecksResult = GetChecksOKResult | GetChecksDefaultResult\n\ninterface GetChecksOKResult {\n status: 200\n headers: Headers\n data: Checks\n}\n\ninterface GetChecksDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getChecks = (\n params: GetChecksParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/checks', params, options) as Promise\n\nexport interface PostCheckParams {\n data: PostCheck\n}\n\ntype PostCheckResult = PostCheckCreatedResult | PostCheckDefaultResult\n\ninterface PostCheckCreatedResult {\n status: 201\n headers: Headers\n data: Check\n}\n\ninterface PostCheckDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postCheck = (\n params: PostCheckParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/checks',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetCheckParams {\n checkID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetCheckResult = GetCheckOKResult | GetCheckDefaultResult\n\ninterface GetCheckOKResult {\n status: 200\n headers: Headers\n data: Check\n}\n\ninterface GetCheckDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getCheck = (\n params: GetCheckParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/checks/${params.checkID}`,\n params,\n options\n ) as Promise\n\nexport interface PutCheckParams {\n checkID: string\n\n data: Check\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutCheckResult =\n | PutCheckOKResult\n | PutCheckNotFoundResult\n | PutCheckDefaultResult\n\ninterface PutCheckOKResult {\n status: 200\n headers: Headers\n data: Check\n}\n\ninterface PutCheckNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutCheckDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putCheck = (\n params: PutCheckParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/checks/${params.checkID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PatchCheckParams {\n checkID: string\n\n data: CheckPatch\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchCheckResult =\n | PatchCheckOKResult\n | PatchCheckNotFoundResult\n | PatchCheckDefaultResult\n\ninterface PatchCheckOKResult {\n status: 200\n headers: Headers\n data: Check\n}\n\ninterface PatchCheckNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchCheckDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchCheck = (\n params: PatchCheckParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/checks/${params.checkID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteCheckParams {\n checkID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteCheckResult =\n | DeleteCheckNoContentResult\n | DeleteCheckNotFoundResult\n | DeleteCheckDefaultResult\n\ninterface DeleteCheckNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteCheckNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteCheckDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteCheck = (\n params: DeleteCheckParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/checks/${params.checkID}`,\n params,\n options\n ) as Promise\n\nexport interface GetChecksLabelsParams {\n checkID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetChecksLabelsResult =\n | GetChecksLabelsOKResult\n | GetChecksLabelsDefaultResult\n\ninterface GetChecksLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetChecksLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getChecksLabels = (\n params: GetChecksLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/checks/${params.checkID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostChecksLabelParams {\n checkID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostChecksLabelResult =\n | PostChecksLabelCreatedResult\n | PostChecksLabelDefaultResult\n\ninterface PostChecksLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostChecksLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postChecksLabel = (\n params: PostChecksLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/checks/${params.checkID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteChecksLabelParams {\n checkID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteChecksLabelResult =\n | DeleteChecksLabelNoContentResult\n | DeleteChecksLabelNotFoundResult\n | DeleteChecksLabelDefaultResult\n\ninterface DeleteChecksLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteChecksLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteChecksLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteChecksLabel = (\n params: DeleteChecksLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/checks/${params.checkID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationRulesParams {\n query: {\n offset?: number\n limit?: number\n orgID: string\n checkID?: string\n tag?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationRulesResult =\n | GetNotificationRulesOKResult\n | GetNotificationRulesDefaultResult\n\ninterface GetNotificationRulesOKResult {\n status: 200\n headers: Headers\n data: NotificationRules\n}\n\ninterface GetNotificationRulesDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationRules = (\n params: GetNotificationRulesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/notificationRules',\n params,\n options\n ) as Promise\n\nexport interface PostNotificationRuleParams {\n data: PostNotificationRule\n}\n\ntype PostNotificationRuleResult =\n | PostNotificationRuleCreatedResult\n | PostNotificationRuleDefaultResult\n\ninterface PostNotificationRuleCreatedResult {\n status: 201\n headers: Headers\n data: NotificationRule\n}\n\ninterface PostNotificationRuleDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotificationRule = (\n params: PostNotificationRuleParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/notificationRules',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetChecksQueryParams {\n checkID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetChecksQueryResult =\n | GetChecksQueryOKResult\n | GetChecksQueryBadRequestResult\n | GetChecksQueryNotFoundResult\n | GetChecksQueryDefaultResult\n\ninterface GetChecksQueryOKResult {\n status: 200\n headers: Headers\n data: FluxResponse\n}\n\ninterface GetChecksQueryBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetChecksQueryNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetChecksQueryDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getChecksQuery = (\n params: GetChecksQueryParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/checks/${params.checkID}/query`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationRuleParams {\n ruleID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationRuleResult =\n | GetNotificationRuleOKResult\n | GetNotificationRuleDefaultResult\n\ninterface GetNotificationRuleOKResult {\n status: 200\n headers: Headers\n data: NotificationRule\n}\n\ninterface GetNotificationRuleDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationRule = (\n params: GetNotificationRuleParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/notificationRules/${params.ruleID}`,\n params,\n options\n ) as Promise\n\nexport interface PutNotificationRuleParams {\n ruleID: string\n\n data: NotificationRule\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutNotificationRuleResult =\n | PutNotificationRuleOKResult\n | PutNotificationRuleNotFoundResult\n | PutNotificationRuleDefaultResult\n\ninterface PutNotificationRuleOKResult {\n status: 200\n headers: Headers\n data: NotificationRule\n}\n\ninterface PutNotificationRuleNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutNotificationRuleDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putNotificationRule = (\n params: PutNotificationRuleParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/notificationRules/${params.ruleID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PatchNotificationRuleParams {\n ruleID: string\n\n data: NotificationRuleUpdate\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchNotificationRuleResult =\n | PatchNotificationRuleOKResult\n | PatchNotificationRuleNotFoundResult\n | PatchNotificationRuleDefaultResult\n\ninterface PatchNotificationRuleOKResult {\n status: 200\n headers: Headers\n data: NotificationRule\n}\n\ninterface PatchNotificationRuleNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchNotificationRuleDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchNotificationRule = (\n params: PatchNotificationRuleParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/notificationRules/${params.ruleID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteNotificationRuleParams {\n ruleID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteNotificationRuleResult =\n | DeleteNotificationRuleNoContentResult\n | DeleteNotificationRuleNotFoundResult\n | DeleteNotificationRuleDefaultResult\n\ninterface DeleteNotificationRuleNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteNotificationRuleNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotificationRuleDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotificationRule = (\n params: DeleteNotificationRuleParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/notificationRules/${params.ruleID}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationRulesLabelsParams {\n ruleID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationRulesLabelsResult =\n | GetNotificationRulesLabelsOKResult\n | GetNotificationRulesLabelsDefaultResult\n\ninterface GetNotificationRulesLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetNotificationRulesLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationRulesLabels = (\n params: GetNotificationRulesLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/notificationRules/${params.ruleID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostNotificationRulesLabelParams {\n ruleID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostNotificationRulesLabelResult =\n | PostNotificationRulesLabelCreatedResult\n | PostNotificationRulesLabelDefaultResult\n\ninterface PostNotificationRulesLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostNotificationRulesLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotificationRulesLabel = (\n params: PostNotificationRulesLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/notificationRules/${params.ruleID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteNotificationRulesLabelParams {\n ruleID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteNotificationRulesLabelResult =\n | DeleteNotificationRulesLabelNoContentResult\n | DeleteNotificationRulesLabelNotFoundResult\n | DeleteNotificationRulesLabelDefaultResult\n\ninterface DeleteNotificationRulesLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteNotificationRulesLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotificationRulesLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotificationRulesLabel = (\n params: DeleteNotificationRulesLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/notificationRules/${params.ruleID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationRulesQueryParams {\n ruleID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationRulesQueryResult =\n | GetNotificationRulesQueryOKResult\n | GetNotificationRulesQueryBadRequestResult\n | GetNotificationRulesQueryNotFoundResult\n | GetNotificationRulesQueryDefaultResult\n\ninterface GetNotificationRulesQueryOKResult {\n status: 200\n headers: Headers\n data: FluxResponse\n}\n\ninterface GetNotificationRulesQueryBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetNotificationRulesQueryNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetNotificationRulesQueryDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationRulesQuery = (\n params: GetNotificationRulesQueryParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/notificationRules/${params.ruleID}/query`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationEndpointsParams {\n query: {\n offset?: number\n limit?: number\n orgID: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationEndpointsResult =\n | GetNotificationEndpointsOKResult\n | GetNotificationEndpointsDefaultResult\n\ninterface GetNotificationEndpointsOKResult {\n status: 200\n headers: Headers\n data: NotificationEndpoints\n}\n\ninterface GetNotificationEndpointsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationEndpoints = (\n params: GetNotificationEndpointsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/notificationEndpoints',\n params,\n options\n ) as Promise\n\nexport interface PostNotificationEndpointParams {\n data: PostNotificationEndpoint\n}\n\ntype PostNotificationEndpointResult =\n | PostNotificationEndpointCreatedResult\n | PostNotificationEndpointDefaultResult\n\ninterface PostNotificationEndpointCreatedResult {\n status: 201\n headers: Headers\n data: NotificationEndpoint\n}\n\ninterface PostNotificationEndpointDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotificationEndpoint = (\n params: PostNotificationEndpointParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/notificationEndpoints',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetNotificationEndpointParams {\n endpointID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationEndpointResult =\n | GetNotificationEndpointOKResult\n | GetNotificationEndpointDefaultResult\n\ninterface GetNotificationEndpointOKResult {\n status: 200\n headers: Headers\n data: NotificationEndpoint\n}\n\ninterface GetNotificationEndpointDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationEndpoint = (\n params: GetNotificationEndpointParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/notificationEndpoints/${params.endpointID}`,\n params,\n options\n ) as Promise\n\nexport interface PutNotificationEndpointParams {\n endpointID: string\n\n data: NotificationEndpoint\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutNotificationEndpointResult =\n | PutNotificationEndpointOKResult\n | PutNotificationEndpointNotFoundResult\n | PutNotificationEndpointDefaultResult\n\ninterface PutNotificationEndpointOKResult {\n status: 200\n headers: Headers\n data: NotificationEndpoint\n}\n\ninterface PutNotificationEndpointNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PutNotificationEndpointDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putNotificationEndpoint = (\n params: PutNotificationEndpointParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/notificationEndpoints/${params.endpointID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PatchNotificationEndpointParams {\n endpointID: string\n\n data: NotificationEndpointUpdate\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchNotificationEndpointResult =\n | PatchNotificationEndpointOKResult\n | PatchNotificationEndpointNotFoundResult\n | PatchNotificationEndpointDefaultResult\n\ninterface PatchNotificationEndpointOKResult {\n status: 200\n headers: Headers\n data: NotificationEndpoint\n}\n\ninterface PatchNotificationEndpointNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchNotificationEndpointDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchNotificationEndpoint = (\n params: PatchNotificationEndpointParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/notificationEndpoints/${params.endpointID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteNotificationEndpointParams {\n endpointID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteNotificationEndpointResult =\n | DeleteNotificationEndpointNoContentResult\n | DeleteNotificationEndpointNotFoundResult\n | DeleteNotificationEndpointDefaultResult\n\ninterface DeleteNotificationEndpointNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteNotificationEndpointNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotificationEndpointDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotificationEndpoint = (\n params: DeleteNotificationEndpointParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/notificationEndpoints/${params.endpointID}`,\n params,\n options\n ) as Promise\n\nexport interface GetNotificationEndpointsLabelsParams {\n endpointID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetNotificationEndpointsLabelsResult =\n | GetNotificationEndpointsLabelsOKResult\n | GetNotificationEndpointsLabelsDefaultResult\n\ninterface GetNotificationEndpointsLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetNotificationEndpointsLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getNotificationEndpointsLabels = (\n params: GetNotificationEndpointsLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/notificationEndpoints/${params.endpointID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostNotificationEndpointsLabelParams {\n endpointID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostNotificationEndpointsLabelResult =\n | PostNotificationEndpointsLabelCreatedResult\n | PostNotificationEndpointsLabelDefaultResult\n\ninterface PostNotificationEndpointsLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostNotificationEndpointsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postNotificationEndpointsLabel = (\n params: PostNotificationEndpointsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/notificationEndpoints/${params.endpointID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteNotificationEndpointsLabelParams {\n endpointID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteNotificationEndpointsLabelResult =\n | DeleteNotificationEndpointsLabelNoContentResult\n | DeleteNotificationEndpointsLabelNotFoundResult\n | DeleteNotificationEndpointsLabelDefaultResult\n\ninterface DeleteNotificationEndpointsLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteNotificationEndpointsLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteNotificationEndpointsLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteNotificationEndpointsLabel = (\n params: DeleteNotificationEndpointsLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/notificationEndpoints/${params.endpointID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofAllParams {\n query?: {\n cpu?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofAllResult =\n | GetDebugPprofAllOKResult\n | GetDebugPprofAllDefaultResult\n\ninterface GetDebugPprofAllOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofAllDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofAll = (\n params: GetDebugPprofAllParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/all',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofAllocsParams {\n query?: {\n debug?: number\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofAllocsResult =\n | GetDebugPprofAllocsOKResult\n | GetDebugPprofAllocsDefaultResult\n\ninterface GetDebugPprofAllocsOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofAllocsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofAllocs = (\n params: GetDebugPprofAllocsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/allocs',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofBlockParams {\n query?: {\n debug?: number\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofBlockResult =\n | GetDebugPprofBlockOKResult\n | GetDebugPprofBlockDefaultResult\n\ninterface GetDebugPprofBlockOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofBlockDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofBlock = (\n params: GetDebugPprofBlockParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/block',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofCmdlineParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofCmdlineResult =\n | GetDebugPprofCmdlineOKResult\n | GetDebugPprofCmdlineDefaultResult\n\ninterface GetDebugPprofCmdlineOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofCmdlineDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofCmdline = (\n params: GetDebugPprofCmdlineParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/cmdline',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofGoroutineParams {\n query?: {\n debug?: number\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofGoroutineResult =\n | GetDebugPprofGoroutineOKResult\n | GetDebugPprofGoroutineDefaultResult\n\ninterface GetDebugPprofGoroutineOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofGoroutineDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofGoroutine = (\n params: GetDebugPprofGoroutineParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/goroutine',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofHeapParams {\n query?: {\n debug?: number\n seconds?: string\n gc?: number\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofHeapResult =\n | GetDebugPprofHeapOKResult\n | GetDebugPprofHeapDefaultResult\n\ninterface GetDebugPprofHeapOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofHeapDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofHeap = (\n params: GetDebugPprofHeapParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/heap',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofMutexParams {\n query?: {\n debug?: number\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofMutexResult =\n | GetDebugPprofMutexOKResult\n | GetDebugPprofMutexDefaultResult\n\ninterface GetDebugPprofMutexOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofMutexDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofMutex = (\n params: GetDebugPprofMutexParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/mutex',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofProfileParams {\n query?: {\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofProfileResult =\n | GetDebugPprofProfileOKResult\n | GetDebugPprofProfileDefaultResult\n\ninterface GetDebugPprofProfileOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofProfileDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofProfile = (\n params: GetDebugPprofProfileParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/profile',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofThreadcreateParams {\n query?: {\n debug?: number\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofThreadcreateResult =\n | GetDebugPprofThreadcreateOKResult\n | GetDebugPprofThreadcreateDefaultResult\n\ninterface GetDebugPprofThreadcreateOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofThreadcreateDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofThreadcreate = (\n params: GetDebugPprofThreadcreateParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/threadcreate',\n params,\n options\n ) as Promise\n\nexport interface GetDebugPprofTraceParams {\n query?: {\n seconds?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDebugPprofTraceResult =\n | GetDebugPprofTraceOKResult\n | GetDebugPprofTraceDefaultResult\n\ninterface GetDebugPprofTraceOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetDebugPprofTraceDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDebugPprofTrace = (\n params: GetDebugPprofTraceParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/debug/pprof/trace',\n params,\n options\n ) as Promise\n\nexport interface GetHealthParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetHealthResult =\n | GetHealthOKResult\n | GetHealthServiceUnavailableResult\n | GetHealthDefaultResult\n\ninterface GetHealthOKResult {\n status: 200\n headers: Headers\n data: HealthCheck\n}\n\ninterface GetHealthServiceUnavailableResult {\n status: 503\n headers: Headers\n data: HealthCheck\n}\n\ninterface GetHealthDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getHealth = (\n params: GetHealthParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/health', params, options) as Promise\n\nexport interface GetMetricsParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetMetricsResult = GetMetricsOKResult | GetMetricsDefaultResult\n\ninterface GetMetricsOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetMetricsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getMetrics = (\n params: GetMetricsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/metrics',\n params,\n options\n ) as Promise\n\nexport interface GetReadyParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetReadyResult = GetReadyOKResult | GetReadyDefaultResult\n\ninterface GetReadyOKResult {\n status: 200\n headers: Headers\n data: Ready\n}\n\ninterface GetReadyDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getReady = (\n params: GetReadyParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/ready', params, options) as Promise\n\nexport interface GetUsersParams {\n query?: {\n offset?: number\n limit?: number\n after?: string\n name?: string\n id?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetUsersResult = GetUsersOKResult | GetUsersDefaultResult\n\ninterface GetUsersOKResult {\n status: 200\n headers: Headers\n data: Users\n}\n\ninterface GetUsersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getUsers = (\n params: GetUsersParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/users', params, options) as Promise\n\nexport interface PostUserParams {\n data: User\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostUserResult =\n | PostUserCreatedResult\n | PostUserUnauthorizedResult\n | PostUserUnprocessableEntityResult\n | PostUserInternalServerErrorResult\n | PostUserDefaultResult\n\ninterface PostUserCreatedResult {\n status: 201\n headers: Headers\n data: UserResponse\n}\n\ninterface PostUserUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostUserUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostUserInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postUser = (\n params: PostUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/users',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetUserParams {\n userID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetUserResult = GetUserOKResult | GetUserDefaultResult\n\ninterface GetUserOKResult {\n status: 200\n headers: Headers\n data: UserResponse\n}\n\ninterface GetUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getUser = (\n params: GetUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/users/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchUserParams {\n userID: string\n\n data: User\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchUserResult = PatchUserOKResult | PatchUserDefaultResult\n\ninterface PatchUserOKResult {\n status: 200\n headers: Headers\n data: UserResponse\n}\n\ninterface PatchUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchUser = (\n params: PatchUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/users/${params.userID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteUserParams {\n userID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteUserResult = DeleteUserNoContentResult | DeleteUserDefaultResult\n\ninterface DeleteUserNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteUser = (\n params: DeleteUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/users/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetSetupParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetSetupResult = GetSetupOKResult\n\ninterface GetSetupOKResult {\n status: 200\n headers: Headers\n data: IsOnboarding\n}\n\nexport const getSetup = (\n params: GetSetupParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/setup', params, options) as Promise\n\nexport interface PostSetupParams {\n data: OnboardingRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostSetupResult = PostSetupCreatedResult | PostSetupDefaultResult\n\ninterface PostSetupCreatedResult {\n status: 201\n headers: Headers\n data: OnboardingResponse\n}\n\ninterface PostSetupDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postSetup = (\n params: PostSetupParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/setup',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetAuthorizationsParams {\n query?: {\n userID?: string\n user?: string\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetAuthorizationsResult =\n | GetAuthorizationsOKResult\n | GetAuthorizationsDefaultResult\n\ninterface GetAuthorizationsOKResult {\n status: 200\n headers: Headers\n data: Authorizations\n}\n\ninterface GetAuthorizationsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getAuthorizations = (\n params: GetAuthorizationsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/authorizations',\n params,\n options\n ) as Promise\n\nexport interface PostAuthorizationParams {\n data: AuthorizationPostRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostAuthorizationResult =\n | PostAuthorizationCreatedResult\n | PostAuthorizationBadRequestResult\n | PostAuthorizationDefaultResult\n\ninterface PostAuthorizationCreatedResult {\n status: 201\n headers: Headers\n data: Authorization\n}\n\ninterface PostAuthorizationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostAuthorizationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postAuthorization = (\n params: PostAuthorizationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/authorizations',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetAuthorizationParams {\n authID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetAuthorizationResult =\n | GetAuthorizationOKResult\n | GetAuthorizationDefaultResult\n\ninterface GetAuthorizationOKResult {\n status: 200\n headers: Headers\n data: Authorization\n}\n\ninterface GetAuthorizationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getAuthorization = (\n params: GetAuthorizationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/authorizations/${params.authID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchAuthorizationParams {\n authID: string\n\n data: AuthorizationUpdateRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchAuthorizationResult =\n | PatchAuthorizationOKResult\n | PatchAuthorizationDefaultResult\n\ninterface PatchAuthorizationOKResult {\n status: 200\n headers: Headers\n data: Authorization\n}\n\ninterface PatchAuthorizationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchAuthorization = (\n params: PatchAuthorizationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/authorizations/${params.authID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteAuthorizationParams {\n authID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteAuthorizationResult =\n | DeleteAuthorizationNoContentResult\n | DeleteAuthorizationDefaultResult\n\ninterface DeleteAuthorizationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteAuthorizationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteAuthorization = (\n params: DeleteAuthorizationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/authorizations/${params.authID}`,\n params,\n options\n ) as Promise\n\nexport interface GetVariablesParams {\n query?: {\n org?: string\n orgID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetVariablesResult =\n | GetVariablesOKResult\n | GetVariablesBadRequestResult\n | GetVariablesDefaultResult\n\ninterface GetVariablesOKResult {\n status: 200\n headers: Headers\n data: Variables\n}\n\ninterface GetVariablesBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetVariablesDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getVariables = (\n params: GetVariablesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/variables',\n params,\n options\n ) as Promise\n\nexport interface PostVariableParams {\n data: Variable\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostVariableResult = PostVariableCreatedResult | PostVariableDefaultResult\n\ninterface PostVariableCreatedResult {\n status: 201\n headers: Headers\n data: Variable\n}\n\ninterface PostVariableDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postVariable = (\n params: PostVariableParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/variables',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetVariableParams {\n variableID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetVariableResult =\n | GetVariableOKResult\n | GetVariableNotFoundResult\n | GetVariableDefaultResult\n\ninterface GetVariableOKResult {\n status: 200\n headers: Headers\n data: Variable\n}\n\ninterface GetVariableNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetVariableDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getVariable = (\n params: GetVariableParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/variables/${params.variableID}`,\n params,\n options\n ) as Promise\n\nexport interface PutVariableParams {\n variableID: string\n\n data: Variable\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutVariableResult = PutVariableOKResult | PutVariableDefaultResult\n\ninterface PutVariableOKResult {\n status: 200\n headers: Headers\n data: Variable\n}\n\ninterface PutVariableDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putVariable = (\n params: PutVariableParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2/variables/${params.variableID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PatchVariableParams {\n variableID: string\n\n data: Variable\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchVariableResult = PatchVariableOKResult | PatchVariableDefaultResult\n\ninterface PatchVariableOKResult {\n status: 200\n headers: Headers\n data: Variable\n}\n\ninterface PatchVariableDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchVariable = (\n params: PatchVariableParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/variables/${params.variableID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteVariableParams {\n variableID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteVariableResult =\n | DeleteVariableNoContentResult\n | DeleteVariableDefaultResult\n\ninterface DeleteVariableNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteVariableDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteVariable = (\n params: DeleteVariableParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/variables/${params.variableID}`,\n params,\n options\n ) as Promise\n\nexport interface GetSourcesParams {\n query?: {\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetSourcesResult = GetSourcesOKResult | GetSourcesDefaultResult\n\ninterface GetSourcesOKResult {\n status: 200\n headers: Headers\n data: Sources\n}\n\ninterface GetSourcesDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getSources = (\n params: GetSourcesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/sources',\n params,\n options\n ) as Promise\n\nexport interface PostSourceParams {\n data: Source\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostSourceResult = PostSourceCreatedResult | PostSourceDefaultResult\n\ninterface PostSourceCreatedResult {\n status: 201\n headers: Headers\n data: Source\n}\n\ninterface PostSourceDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postSource = (\n params: PostSourceParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/sources',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetSourceParams {\n sourceID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetSourceResult =\n | GetSourceOKResult\n | GetSourceNotFoundResult\n | GetSourceDefaultResult\n\ninterface GetSourceOKResult {\n status: 200\n headers: Headers\n data: Source\n}\n\ninterface GetSourceNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetSourceDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getSource = (\n params: GetSourceParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/sources/${params.sourceID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchSourceParams {\n sourceID: string\n\n data: Source\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchSourceResult =\n | PatchSourceOKResult\n | PatchSourceNotFoundResult\n | PatchSourceDefaultResult\n\ninterface PatchSourceOKResult {\n status: 200\n headers: Headers\n data: Source\n}\n\ninterface PatchSourceNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchSourceDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchSource = (\n params: PatchSourceParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/sources/${params.sourceID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteSourceParams {\n sourceID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteSourceResult =\n | DeleteSourceNoContentResult\n | DeleteSourceNotFoundResult\n | DeleteSourceDefaultResult\n\ninterface DeleteSourceNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteSourceNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteSourceDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteSource = (\n params: DeleteSourceParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/sources/${params.sourceID}`,\n params,\n options\n ) as Promise\n\nexport interface GetSourcesHealthParams {\n sourceID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetSourcesHealthResult =\n | GetSourcesHealthOKResult\n | GetSourcesHealthServiceUnavailableResult\n | GetSourcesHealthDefaultResult\n\ninterface GetSourcesHealthOKResult {\n status: 200\n headers: Headers\n data: HealthCheck\n}\n\ninterface GetSourcesHealthServiceUnavailableResult {\n status: 503\n headers: Headers\n data: HealthCheck\n}\n\ninterface GetSourcesHealthDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getSourcesHealth = (\n params: GetSourcesHealthParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/sources/${params.sourceID}/health`,\n params,\n options\n ) as Promise\n\nexport interface GetSourcesBucketsParams {\n sourceID: string\n\n query?: {\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetSourcesBucketsResult =\n | GetSourcesBucketsOKResult\n | GetSourcesBucketsNotFoundResult\n | GetSourcesBucketsDefaultResult\n\ninterface GetSourcesBucketsOKResult {\n status: 200\n headers: Headers\n data: Buckets\n}\n\ninterface GetSourcesBucketsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetSourcesBucketsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getSourcesBuckets = (\n params: GetSourcesBucketsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/sources/${params.sourceID}/buckets`,\n params,\n options\n ) as Promise\n\nexport interface GetScrapersParams {\n query?: {\n name?: string\n id?: any\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetScrapersResult = GetScrapersOKResult\n\ninterface GetScrapersOKResult {\n status: 200\n headers: Headers\n data: ScraperTargetResponses\n}\n\nexport const getScrapers = (\n params: GetScrapersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/scrapers',\n params,\n options\n ) as Promise\n\nexport interface PostScraperParams {\n data: ScraperTargetRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostScraperResult = PostScraperCreatedResult | PostScraperDefaultResult\n\ninterface PostScraperCreatedResult {\n status: 201\n headers: Headers\n data: ScraperTargetResponse\n}\n\ninterface PostScraperDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScraper = (\n params: PostScraperParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/scrapers',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetScraperParams {\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetScraperResult = GetScraperOKResult | GetScraperDefaultResult\n\ninterface GetScraperOKResult {\n status: 200\n headers: Headers\n data: ScraperTargetResponse\n}\n\ninterface GetScraperDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScraper = (\n params: GetScraperParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/scrapers/${params.scraperTargetID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchScraperParams {\n scraperTargetID: string\n\n data: ScraperTargetRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchScraperResult = PatchScraperOKResult | PatchScraperDefaultResult\n\ninterface PatchScraperOKResult {\n status: 200\n headers: Headers\n data: ScraperTargetResponse\n}\n\ninterface PatchScraperDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchScraper = (\n params: PatchScraperParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/scrapers/${params.scraperTargetID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteScraperParams {\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteScraperResult =\n | DeleteScraperNoContentResult\n | DeleteScraperDefaultResult\n\ninterface DeleteScraperNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteScraperDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteScraper = (\n params: DeleteScraperParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/scrapers/${params.scraperTargetID}`,\n params,\n options\n ) as Promise\n\nexport interface GetScrapersLabelsParams {\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetScrapersLabelsResult =\n | GetScrapersLabelsOKResult\n | GetScrapersLabelsDefaultResult\n\ninterface GetScrapersLabelsOKResult {\n status: 200\n headers: Headers\n data: LabelsResponse\n}\n\ninterface GetScrapersLabelsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScrapersLabels = (\n params: GetScrapersLabelsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/scrapers/${params.scraperTargetID}/labels`,\n params,\n options\n ) as Promise\n\nexport interface PostScrapersLabelParams {\n scraperTargetID: string\n\n data: LabelMapping\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostScrapersLabelResult =\n | PostScrapersLabelCreatedResult\n | PostScrapersLabelDefaultResult\n\ninterface PostScrapersLabelCreatedResult {\n status: 201\n headers: Headers\n data: LabelResponse\n}\n\ninterface PostScrapersLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScrapersLabel = (\n params: PostScrapersLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/scrapers/${params.scraperTargetID}/labels`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteScrapersLabelParams {\n scraperTargetID: string\n labelID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteScrapersLabelResult =\n | DeleteScrapersLabelNoContentResult\n | DeleteScrapersLabelNotFoundResult\n | DeleteScrapersLabelDefaultResult\n\ninterface DeleteScrapersLabelNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteScrapersLabelNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteScrapersLabelDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteScrapersLabel = (\n params: DeleteScrapersLabelParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/scrapers/${params.scraperTargetID}/labels/${params.labelID}`,\n params,\n options\n ) as Promise\n\nexport interface GetScrapersMembersParams {\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetScrapersMembersResult =\n | GetScrapersMembersOKResult\n | GetScrapersMembersDefaultResult\n\ninterface GetScrapersMembersOKResult {\n status: 200\n headers: Headers\n data: ResourceMembers\n}\n\ninterface GetScrapersMembersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScrapersMembers = (\n params: GetScrapersMembersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/scrapers/${params.scraperTargetID}/members`,\n params,\n options\n ) as Promise\n\nexport interface PostScrapersMemberParams {\n scraperTargetID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostScrapersMemberResult =\n | PostScrapersMemberCreatedResult\n | PostScrapersMemberDefaultResult\n\ninterface PostScrapersMemberCreatedResult {\n status: 201\n headers: Headers\n data: ResourceMember\n}\n\ninterface PostScrapersMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScrapersMember = (\n params: PostScrapersMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/scrapers/${params.scraperTargetID}/members`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteScrapersMemberParams {\n userID: string\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteScrapersMemberResult =\n | DeleteScrapersMemberNoContentResult\n | DeleteScrapersMemberDefaultResult\n\ninterface DeleteScrapersMemberNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteScrapersMemberDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteScrapersMember = (\n params: DeleteScrapersMemberParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/scrapers/${params.scraperTargetID}/members/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetScrapersOwnersParams {\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetScrapersOwnersResult =\n | GetScrapersOwnersOKResult\n | GetScrapersOwnersDefaultResult\n\ninterface GetScrapersOwnersOKResult {\n status: 200\n headers: Headers\n data: ResourceOwners\n}\n\ninterface GetScrapersOwnersDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getScrapersOwners = (\n params: GetScrapersOwnersParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/scrapers/${params.scraperTargetID}/owners`,\n params,\n options\n ) as Promise\n\nexport interface PostScrapersOwnerParams {\n scraperTargetID: string\n\n data: AddResourceMemberRequestBody\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostScrapersOwnerResult =\n | PostScrapersOwnerCreatedResult\n | PostScrapersOwnerDefaultResult\n\ninterface PostScrapersOwnerCreatedResult {\n status: 201\n headers: Headers\n data: ResourceOwner\n}\n\ninterface PostScrapersOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postScrapersOwner = (\n params: PostScrapersOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/scrapers/${params.scraperTargetID}/owners`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteScrapersOwnerParams {\n userID: string\n scraperTargetID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteScrapersOwnerResult =\n | DeleteScrapersOwnerNoContentResult\n | DeleteScrapersOwnerDefaultResult\n\ninterface DeleteScrapersOwnerNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteScrapersOwnerDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteScrapersOwner = (\n params: DeleteScrapersOwnerParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/scrapers/${params.scraperTargetID}/owners/${params.userID}`,\n params,\n options\n ) as Promise\n\nexport interface GetBackupKvParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetBackupKvResult = GetBackupKvOKResult | GetBackupKvDefaultResult\n\ninterface GetBackupKvOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetBackupKvDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBackupKv = (\n params: GetBackupKvParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/backup/kv',\n params,\n options\n ) as Promise\n\nexport interface GetBackupMetadataParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Accept-Encoding'?: string\n }\n}\n\ntype GetBackupMetadataResult =\n | GetBackupMetadataOKResult\n | GetBackupMetadataDefaultResult\n\ninterface GetBackupMetadataOKResult {\n status: 200\n headers: Headers\n data: MetadataBackup\n}\n\ninterface GetBackupMetadataDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBackupMetadata = (\n params: GetBackupMetadataParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/backup/metadata',\n params,\n options\n ) as Promise\n\nexport interface GetBackupShardParams {\n shardID: number\n\n query?: {\n since?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Accept-Encoding'?: string\n }\n}\n\ntype GetBackupShardResult =\n | GetBackupShardOKResult\n | GetBackupShardNotFoundResult\n | GetBackupShardDefaultResult\n\ninterface GetBackupShardOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface GetBackupShardNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetBackupShardDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getBackupShard = (\n params: GetBackupShardParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/backup/shards/${params.shardID}`,\n params,\n options\n ) as Promise\n\nexport interface PostRestoreKvParams {\n data: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Encoding'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostRestoreKvResult =\n | PostRestoreKvOKResult\n | PostRestoreKvNoContentResult\n | PostRestoreKvDefaultResult\n\ninterface PostRestoreKvOKResult {\n status: 200\n headers: Headers\n data: {\n token?: string\n }\n}\n\ninterface PostRestoreKvNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostRestoreKvDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRestoreKv = (\n params: PostRestoreKvParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/restore/kv',\n {...params, headers: {...params.headers, 'Content-Type': 'text/plain'}},\n options\n ) as Promise\n\nexport interface PostRestoreSqlParams {\n data: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Encoding'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostRestoreSqlResult =\n | PostRestoreSqlNoContentResult\n | PostRestoreSqlDefaultResult\n\ninterface PostRestoreSqlNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostRestoreSqlDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRestoreSql = (\n params: PostRestoreSqlParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/restore/sql',\n {...params, headers: {...params.headers, 'Content-Type': 'text/plain'}},\n options\n ) as Promise\n\nexport interface PostRestoreBucketParams {\n bucketID: string\n\n data: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostRestoreBucketResult =\n | PostRestoreBucketOKResult\n | PostRestoreBucketDefaultResult\n\ninterface PostRestoreBucketOKResult {\n status: 200\n headers: Headers\n data: string\n}\n\ninterface PostRestoreBucketDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRestoreBucket = (\n params: PostRestoreBucketParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/restore/bucket/${params.bucketID}`,\n {...params, headers: {...params.headers, 'Content-Type': 'text/plain'}},\n options\n ) as Promise\n\nexport interface PostRestoreBucketMetadataParams {\n data: BucketMetadataManifest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostRestoreBucketMetadataResult =\n | PostRestoreBucketMetadataCreatedResult\n | PostRestoreBucketMetadataDefaultResult\n\ninterface PostRestoreBucketMetadataCreatedResult {\n status: 201\n headers: Headers\n data: RestoredBucketMappings\n}\n\ninterface PostRestoreBucketMetadataDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRestoreBucketMetadata = (\n params: PostRestoreBucketMetadataParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/restore/bucketMetadata',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PostRestoreShardsParams {\n shardID: string\n\n data: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n 'Content-Encoding'?: string\n 'Content-Type'?: string\n }\n}\n\ntype PostRestoreShardsResult =\n | PostRestoreShardsNoContentResult\n | PostRestoreShardsDefaultResult\n\ninterface PostRestoreShardsNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostRestoreShardsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRestoreShards = (\n params: PostRestoreShardsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/restore/shards/${params.shardID}`,\n {...params, headers: {...params.headers, 'Content-Type': 'text/plain'}},\n options\n ) as Promise\n\nexport interface GetConfigParams {\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetConfigResult =\n | GetConfigOKResult\n | GetConfigUnauthorizedResult\n | GetConfigDefaultResult\n\ninterface GetConfigOKResult {\n status: 200\n headers: Headers\n data: Config\n}\n\ninterface GetConfigUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetConfigDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getConfig = (\n params: GetConfigParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/config', params, options) as Promise\n\nexport interface GetRemotesParams {\n query: {\n orgID: string\n name?: string\n remoteURL?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetRemotesResult =\n | GetRemotesOKResult\n | GetRemotesNotFoundResult\n | GetRemotesDefaultResult\n\ninterface GetRemotesOKResult {\n status: 200\n headers: Headers\n data: RemoteConnections\n}\n\ninterface GetRemotesNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetRemotesDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getRemotes = (\n params: GetRemotesParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/remotes',\n params,\n options\n ) as Promise\n\nexport interface PostRemoteParams {\n data: RemoteConnectionCreationRequest\n}\n\ntype PostRemoteResult =\n | PostRemoteCreatedResult\n | PostRemoteBadRequestResult\n | PostRemoteDefaultResult\n\ninterface PostRemoteCreatedResult {\n status: 201\n headers: Headers\n data: RemoteConnection\n}\n\ninterface PostRemoteBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostRemoteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postRemote = (\n params: PostRemoteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/remotes',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetRemoteParams {\n remoteID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetRemoteResult =\n | GetRemoteOKResult\n | GetRemoteNotFoundResult\n | GetRemoteDefaultResult\n\ninterface GetRemoteOKResult {\n status: 200\n headers: Headers\n data: RemoteConnection\n}\n\ninterface GetRemoteNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetRemoteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getRemote = (\n params: GetRemoteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/remotes/${params.remoteID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchRemoteParams {\n remoteID: string\n\n data: RemoteConnectionUpdateRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchRemoteResult =\n | PatchRemoteOKResult\n | PatchRemoteBadRequestResult\n | PatchRemoteNotFoundResult\n | PatchRemoteDefaultResult\n\ninterface PatchRemoteOKResult {\n status: 200\n headers: Headers\n data: RemoteConnection\n}\n\ninterface PatchRemoteBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchRemoteNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchRemoteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchRemote = (\n params: PatchRemoteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/remotes/${params.remoteID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteRemoteParams {\n remoteID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteRemoteResult =\n | DeleteRemoteNoContentResult\n | DeleteRemoteNotFoundResult\n | DeleteRemoteDefaultResult\n\ninterface DeleteRemoteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteRemoteNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteRemoteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteRemote = (\n params: DeleteRemoteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/remotes/${params.remoteID}`,\n params,\n options\n ) as Promise\n\nexport interface GetReplicationsParams {\n query: {\n orgID: string\n name?: string\n remoteID?: string\n localBucketID?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetReplicationsResult =\n | GetReplicationsOKResult\n | GetReplicationsNotFoundResult\n | GetReplicationsDefaultResult\n\ninterface GetReplicationsOKResult {\n status: 200\n headers: Headers\n data: Replications\n}\n\ninterface GetReplicationsNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetReplicationsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getReplications = (\n params: GetReplicationsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/replications',\n params,\n options\n ) as Promise\n\nexport interface PostReplicationParams {\n data: ReplicationCreationRequest\n\n query?: {\n validate?: any\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostReplicationResult =\n | PostReplicationCreatedResult\n | PostReplicationNoContentResult\n | PostReplicationBadRequestResult\n | PostReplicationDefaultResult\n\ninterface PostReplicationCreatedResult {\n status: 201\n headers: Headers\n data: Replication\n}\n\ninterface PostReplicationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostReplicationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostReplicationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postReplication = (\n params: PostReplicationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/replications',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetReplicationParams {\n replicationID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetReplicationResult =\n | GetReplicationOKResult\n | GetReplicationNotFoundResult\n | GetReplicationDefaultResult\n\ninterface GetReplicationOKResult {\n status: 200\n headers: Headers\n data: Replication\n}\n\ninterface GetReplicationNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetReplicationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getReplication = (\n params: GetReplicationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/replications/${params.replicationID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchReplicationParams {\n replicationID: string\n\n data: ReplicationUpdateRequest\n\n query?: {\n validate?: any\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchReplicationResult =\n | PatchReplicationOKResult\n | PatchReplicationNoContentResult\n | PatchReplicationBadRequestResult\n | PatchReplicationNotFoundResult\n | PatchReplicationDefaultResult\n\ninterface PatchReplicationOKResult {\n status: 200\n headers: Headers\n data: Replication\n}\n\ninterface PatchReplicationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PatchReplicationBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchReplicationNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchReplicationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchReplication = (\n params: PatchReplicationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/replications/${params.replicationID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteReplicationParams {\n replicationID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteReplicationResult =\n | DeleteReplicationNoContentResult\n | DeleteReplicationNotFoundResult\n | DeleteReplicationDefaultResult\n\ninterface DeleteReplicationNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteReplicationNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteReplicationDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteReplication = (\n params: DeleteReplicationParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/replications/${params.replicationID}`,\n params,\n options\n ) as Promise\n\nexport interface PostReplicationsValidateParams {\n replicationID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostReplicationsValidateResult =\n | PostReplicationsValidateNoContentResult\n | PostReplicationsValidateBadRequestResult\n | PostReplicationsValidateDefaultResult\n\ninterface PostReplicationsValidateNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostReplicationsValidateBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostReplicationsValidateDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postReplicationsValidate = (\n params: PostReplicationsValidateParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n `/api/v2/replications/${params.replicationID}/validate`,\n params,\n options\n ) as Promise\n\nexport interface GetDashboardsParams {\n query?: {\n offset?: number\n limit?: number\n descending?: any\n owner?: string\n sortBy?: string\n id?: any\n orgID?: string\n org?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetDashboardsResult = GetDashboardsOKResult | GetDashboardsDefaultResult\n\ninterface GetDashboardsOKResult {\n status: 200\n headers: Headers\n data: Dashboards\n}\n\ninterface GetDashboardsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getDashboards = (\n params: GetDashboardsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2/dashboards',\n params,\n options\n ) as Promise\n\nexport interface PostDashboardParams {\n data: CreateDashboardRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostDashboardResult =\n | PostDashboardCreatedResult\n | PostDashboardDefaultResult\n\ninterface PostDashboardCreatedResult {\n status: 201\n headers: Headers\n data: Dashboard | DashboardWithViewProperties\n}\n\ninterface PostDashboardDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postDashboard = (\n params: PostDashboardParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/dashboards',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetTasksParams {\n query?: {\n name?: string\n after?: string\n user?: string\n org?: string\n orgID?: string\n status?: string\n limit?: number\n type?: string\n }\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTasksResult =\n | GetTasksOKResult\n | GetTasksUnauthorizedResult\n | GetTasksInternalServerErrorResult\n | GetTasksDefaultResult\n\ninterface GetTasksOKResult {\n status: 200\n headers: Headers\n data: Tasks\n}\n\ninterface GetTasksUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTasksInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTasksDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTasks = (\n params: GetTasksParams,\n options: RequestOptions = {}\n): Promise =>\n request('GET', '/api/v2/tasks', params, options) as Promise\n\nexport interface PostTaskParams {\n data: TaskCreateRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PostTaskResult =\n | PostTaskCreatedResult\n | PostTaskBadRequestResult\n | PostTaskUnauthorizedResult\n | PostTaskInternalServerErrorResult\n | PostTaskDefaultResult\n\ninterface PostTaskCreatedResult {\n status: 201\n headers: Headers\n data: Task\n}\n\ninterface PostTaskBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostTaskUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostTaskInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PostTaskDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postTask = (\n params: PostTaskParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2/tasks',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface GetTaskParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype GetTaskResult =\n | GetTaskOKResult\n | GetTaskBadRequestResult\n | GetTaskUnauthorizedResult\n | GetTaskNotFoundResult\n | GetTaskInternalServerErrorResult\n | GetTaskDefaultResult\n\ninterface GetTaskOKResult {\n status: 200\n headers: Headers\n data: Task\n}\n\ninterface GetTaskBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface GetTaskUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface GetTaskNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface GetTaskInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface GetTaskDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getTask = (\n params: GetTaskParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2/tasks/${params.taskID}`,\n params,\n options\n ) as Promise\n\nexport interface PatchTaskParams {\n taskID: string\n\n data: TaskUpdateRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PatchTaskResult =\n | PatchTaskOKResult\n | PatchTaskBadRequestResult\n | PatchTaskUnauthorizedResult\n | PatchTaskNotFoundResult\n | PatchTaskInternalServerErrorResult\n | PatchTaskDefaultResult\n\ninterface PatchTaskOKResult {\n status: 200\n headers: Headers\n data: Task\n}\n\ninterface PatchTaskBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PatchTaskUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PatchTaskNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface PatchTaskInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface PatchTaskDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchTask = (\n params: PatchTaskParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2/tasks/${params.taskID}`,\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface DeleteTaskParams {\n taskID: string\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype DeleteTaskResult =\n | DeleteTaskNoContentResult\n | DeleteTaskBadRequestResult\n | DeleteTaskUnauthorizedResult\n | DeleteTaskNotFoundResult\n | DeleteTaskInternalServerErrorResult\n | DeleteTaskDefaultResult\n\ninterface DeleteTaskNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface DeleteTaskBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface DeleteTaskUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface DeleteTaskNotFoundResult {\n status: 404\n headers: Headers\n data: Error\n}\n\ninterface DeleteTaskInternalServerErrorResult {\n status: 500\n headers: Headers\n data: Error\n}\n\ninterface DeleteTaskDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const deleteTask = (\n params: DeleteTaskParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'DELETE',\n `/api/v2/tasks/${params.taskID}`,\n params,\n options\n ) as Promise\n","// Libraries\nimport React, {ChangeEvent, FC, useState} from 'react'\n\n// Utils\nimport {convertUserInputValueToNumOrNaN} from 'src/shared/utils/convertUserInput'\n\n// Components\nimport {\n Columns,\n ComponentStatus,\n Form,\n Grid,\n Input,\n} from '@influxdata/clockface'\n\nimport {\n TICK_PROPERTY_PREFIX,\n TICK_PROPERTY_SUFFIX,\n} from 'src/visualization/constants'\n\ninterface ValueTickInputProps {\n axisName: string\n tickPropertyName: string\n tickOptions: string[]\n initialTickOptionValue: number | string\n label: string\n placeholder?: string\n update: (data: any) => void\n elementStylingClass?: string\n}\n\nexport const ValueTickInput: FC = props => {\n const {\n axisName,\n tickPropertyName,\n tickOptions,\n initialTickOptionValue,\n label,\n placeholder,\n update,\n elementStylingClass,\n } = props\n const [tickOptionInput, setTickOptionInput] = useState(\n initialTickOptionValue === initialTickOptionValue\n ? initialTickOptionValue\n : ''\n )\n const [tickOptionInputStatus, setTickOptionInputStatus] =\n useState(ComponentStatus.Default)\n\n const handleInput = (event: ChangeEvent) => {\n setTickOptionInput(event.target.value)\n setTickOptionInputStatus(ComponentStatus.Default)\n }\n\n const updateTickOption = () => {\n const convertedValue = convertUserInputValueToNumOrNaN(tickOptionInput)\n\n let tickOptionNameWithoutAxis = `${tickPropertyName\n .slice(0, 1)\n .toUpperCase()}${tickPropertyName.slice(1).toLowerCase()}`\n if (tickOptionNameWithoutAxis === 'Total') {\n tickOptionNameWithoutAxis += TICK_PROPERTY_SUFFIX\n } else {\n tickOptionNameWithoutAxis = `${TICK_PROPERTY_PREFIX}${tickOptionNameWithoutAxis}`\n }\n\n const tickOptionNameWithAxis = `${axisName.toLowerCase()}${tickOptionNameWithoutAxis}`\n const filteredTickOptions = Array.isArray(tickOptions)\n ? tickOptions.filter(option => option !== tickOptionNameWithAxis)\n : []\n\n if (convertedValue === convertedValue) {\n update({\n [tickOptionNameWithAxis]: convertedValue,\n [`generate${axisName.toUpperCase()}AxisTicks`]: [\n ...filteredTickOptions,\n tickOptionNameWithAxis,\n ],\n })\n } else {\n update({\n [tickOptionNameWithAxis]: convertedValue,\n [`generate${axisName.toUpperCase()}AxisTicks`]: filteredTickOptions,\n })\n if (tickOptionInput !== '') {\n setTickOptionInputStatus(ComponentStatus.Error)\n }\n }\n }\n\n const handleOnBlur = () => updateTickOption()\n\n const handleKeyPress = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n updateTickOption()\n }\n }\n\n return (\n \n \n \n \n \n )\n}\n","// Libraries\nimport React, {\n ChangeEvent,\n createRef,\n CSSProperties,\n FC,\n RefObject,\n useContext,\n useState,\n} from 'react'\n\n// Components\nimport DatePicker from 'src/shared/components/dateRangePicker/DatePicker'\nimport {ClickOutside} from 'src/shared/components/ClickOutside'\nimport {\n Appearance,\n Button,\n ButtonRef,\n Columns,\n ComponentColor,\n ComponentSize,\n ComponentStatus,\n Form,\n Grid,\n Input,\n IconFont,\n Popover,\n PopoverInteraction,\n PopoverPosition,\n} from '@influxdata/clockface'\n\n// Context\nimport {AppSettingContext} from 'src/shared/contexts/app'\n\n// Utils\nimport {isValidRFC3339} from 'src/utils/datetime/validator'\nimport {convertDateToRFC3339} from 'src/utils/datetime/formatters'\n\nimport {TICK_PROPERTY_PREFIX} from 'src/visualization/constants'\ninterface TimeTickInputProps {\n axisName: string\n tickPropertyName: string\n tickOptions: string[]\n initialTickOptionValue: number | string\n dateFormatPlaceholder?: string\n update: (data: any) => void\n}\n\nconst noOp = () => {}\n\nconst getInitialTimeTick = (\n initialTick: string | number,\n timeZone: string\n): string => {\n if (typeof initialTick === 'number' && initialTick === initialTick) {\n const initialDate = new Date(initialTick)\n if (isValidRFC3339(initialDate.toISOString())) {\n return convertDateToRFC3339(initialDate, timeZone)\n }\n }\n return ''\n}\n\nexport const TimeTickInput: FC = props => {\n const {\n axisName,\n tickPropertyName,\n tickOptions,\n initialTickOptionValue,\n dateFormatPlaceholder = 'RFC 3339 or YYYY-MM-DDTHH:mm:ssZ',\n update,\n } = props\n\n const {timeZone} = useContext(AppSettingContext)\n\n const [tickOptionInput, setTickOptionInput] = useState(\n getInitialTimeTick(initialTickOptionValue, timeZone)\n )\n\n const [tickOptionInputStatus, setTickOptionInputStatus] =\n useState(ComponentStatus.Default)\n\n const [isDatePickerOpen, setIsDatePickerOpen] = useState(false)\n\n const [isOnClickOutsideHandlerActive, setIsOnClickOutsideHandlerActive] =\n useState(true)\n\n const triggerRef: RefObject = createRef()\n\n const updateTickOption = (value?: string) => {\n const dateString = value === undefined ? tickOptionInput : value\n const convertedValue = new Date(dateString).valueOf()\n const tickOptionNameWithoutAxis = `${TICK_PROPERTY_PREFIX}${tickPropertyName\n .slice(0, 1)\n .toUpperCase()}${tickPropertyName.slice(1).toLowerCase()}`\n const tickOptionNameWithAxis = `${axisName.toLowerCase()}${tickOptionNameWithoutAxis}`\n const computedTickOptions = Array.isArray(tickOptions)\n ? tickOptions.filter(option => option !== tickOptionNameWithAxis)\n : []\n\n if (!Number.isNaN(convertedValue)) {\n computedTickOptions.push(tickOptionNameWithAxis)\n } else if (tickOptionInput !== '') {\n setTickOptionInputStatus(ComponentStatus.Error)\n }\n update({\n [tickOptionNameWithAxis]: convertedValue,\n [`generate${axisName.toUpperCase()}AxisTicks`]: computedTickOptions,\n })\n }\n\n const handleInput = (event: ChangeEvent) => {\n setTickOptionInput(event.target.value)\n if (isValidRFC3339(event.target.value)) {\n setTickOptionInputStatus(ComponentStatus.Default)\n } else {\n setTickOptionInputStatus(ComponentStatus.Error)\n }\n }\n\n const handleBlur = () => updateTickOption()\n\n const handleKeyPress = (event: React.KeyboardEvent) => {\n if (event.key === 'Enter') {\n updateTickOption()\n }\n }\n\n const getDatePickerDateTime = () => {\n const date = new Date(tickOptionInput)\n if (!Number.isNaN(date.valueOf())) {\n return date.toISOString()\n }\n return new Date().toISOString()\n }\n\n const handleReset = () => {\n setTickOptionInput('')\n updateTickOption('')\n setTickOptionInputStatus(ComponentStatus.Default)\n }\n\n const showDatePicker = () => setIsDatePickerOpen(true)\n const hideDatePicker = () => setIsDatePickerOpen(false)\n\n const toggleDatePicker = () => {\n if (isDatePickerOpen) {\n hideDatePicker()\n } else {\n showDatePicker()\n }\n }\n\n const handleSelectDate = (date: string) => {\n if (isValidRFC3339(date)) {\n const dateRFC3339 = convertDateToRFC3339(new Date(date), timeZone)\n setTickOptionInput(dateRFC3339)\n setTickOptionInputStatus(ComponentStatus.Default)\n updateTickOption(dateRFC3339)\n } else {\n setTickOptionInput('')\n setTickOptionInputStatus(ComponentStatus.Error)\n }\n }\n\n const onClickOutside = () => {\n if (isOnClickOutsideHandlerActive) {\n hideDatePicker()\n }\n }\n\n const allowOnClickOutside = () => setIsOnClickOutsideHandlerActive(true)\n const suppressOnClickOutside = () => setIsOnClickOutsideHandlerActive(false)\n\n const styles: CSSProperties = isDatePickerOpen\n ? {position: 'relative'}\n : {\n top: `${window.innerHeight / 2}px`,\n left: `${window.innerWidth / 2}px`,\n transform: `translate(-50%, -50%)`,\n }\n\n return (\n <>\n \n \n \n \n \n \n \n (\n \n \n \n
\n \n
\n \n \n
\n )}\n />\n {isDatePickerOpen ? (\n \n ) : (\n \n )}\n
\n
\n \n )\n}\n","// Libraries\nimport React, {FC, useState} from 'react'\n\n// Components\nimport {ValueTickInput} from 'src/visualization/components/internal/ValueTickInput'\nimport {TimeTickInput} from 'src/visualization/components/internal/TimeTickInput'\nimport {Columns, Form, Grid, SelectGroup} from '@influxdata/clockface'\n\n// Types\nimport {ButtonShape} from '@influxdata/clockface'\nimport {VisualizationOptionProps} from 'src/visualization'\nimport {\n BandViewProperties,\n XYViewProperties,\n LinePlusSingleStatProperties,\n HeatmapViewProperties,\n HistogramViewProperties,\n MosaicViewProperties,\n ScatterViewProperties,\n} from 'src/types'\n\nconst getGenerateAxisTicksOptionsNames = (axisName: string) => [\n `generate${axisName.toUpperCase()}AxisTicks`,\n `${axisName.toLowerCase()}TotalTicks`,\n `${axisName.toLowerCase()}TickStart`,\n `${axisName.toLowerCase()}TickStep`,\n]\n\ninterface Props extends VisualizationOptionProps {\n properties:\n | BandViewProperties\n | XYViewProperties\n | LinePlusSingleStatProperties\n | HeatmapViewProperties\n | HistogramViewProperties\n | MosaicViewProperties\n | ScatterViewProperties\n axisName: string\n columnType: string\n label?: string\n}\n\nconst AxisTicksGenerator: FC = ({\n axisName,\n columnType,\n label = 'Tick Generator',\n properties,\n update,\n}) => {\n const generateAxisTicks =\n properties[`generate${axisName.toUpperCase()}AxisTicks`] || []\n\n const {hasTotalTicks, hasTickStart, hasTickStep} = generateAxisTicks.reduce(\n (acc, curr) => {\n if (curr === `${axisName.toLowerCase()}TotalTicks`) {\n acc.hasTotalTicks = true\n }\n if (curr === `${axisName.toLowerCase()}TickStart`) {\n acc.hasTickStart = true\n }\n if (curr === `${axisName.toLowerCase()}TickStep`) {\n acc.hasTickStep = true\n }\n\n return acc\n },\n {hasTotalTicks: false, hasTickStart: false, hasTickStep: false}\n )\n\n const totalTicks = hasTotalTicks ? properties[`${axisName}TotalTicks`] : ''\n const tickStart = hasTickStart ? properties[`${axisName}TickStart`] : ''\n const tickStep = hasTickStep ? properties[`${axisName}TickStep`] : ''\n\n const [shouldShowInputs, setShouldShowInputs] = useState(\n generateAxisTicks.reduce((total, optionName) => {\n getGenerateAxisTicksOptionsNames(axisName).forEach(axisTickOption => {\n if (axisTickOption === optionName) {\n total += 1\n }\n })\n return total\n }, 0) > 0\n )\n\n const isTimeColumn = columnType === '_time' ? true : false\n\n const handleChooseAuto = () => {\n setShouldShowInputs(false)\n update({\n [`generate${axisName.toUpperCase()}AxisTicks`]: [],\n })\n }\n\n const handleChooseCustom = () => {\n setShouldShowInputs(true)\n }\n\n let options\n\n if (shouldShowInputs) {\n if (isTimeColumn) {\n options = (\n \n \n \n \n \n )\n } else {\n options = (\n \n \n \n \n \n )\n }\n }\n\n return (\n \n \n \n \n \n Auto\n \n \n Custom\n \n \n \n \n {options}\n \n )\n}\n\nexport default AxisTicksGenerator\n","// Utils\nimport {buildQuery} from 'src/timeMachine/utils/queryBuilder'\nimport {get} from 'lodash'\n\n// Constants\nimport {defaultBuilderConfig} from 'src/views/helpers'\nimport {\n AGG_WINDOW_AUTO,\n DEFAULT_FILLVALUES,\n} from 'src/timeMachine/constants/queryBuilder'\n\ninterface ViewWithQuery {\n properties: {\n queries: Array<{\n editMode?: 'advanced' | 'builder'\n builderConfig?: {\n functions?: Array<{name?: string}>\n aggregateWindow?: {period?: string; fillValues?: boolean}\n }\n text?: string\n }>\n }\n}\n\nfunction applyAutoAggregateRequirements(view: T): T {\n const autoAggregateableQueries = view.properties.queries.map(q => {\n if (q.editMode === 'advanced') {\n return q\n }\n\n const functions = get(q, 'builderConfig.functions', [])\n const queryText = get(q, 'text', '')\n const queryIsNotEmpty = !!queryText.trim()\n\n const originalQueryInScriptEditorMode = {\n ...q,\n editMode: 'advanced' as 'advanced',\n builderConfig: defaultBuilderConfig(),\n }\n\n if (functions.length === 0 && queryIsNotEmpty) {\n return originalQueryInScriptEditorMode\n }\n\n let alteredQuery = false\n\n let period = get(q, 'builderConfig.aggregateWindow.period', null)\n if (period === null) {\n alteredQuery = true\n period = AGG_WINDOW_AUTO\n }\n\n let fillValues = get(q, 'builderConfig.aggregateWindow.fillValues', null)\n if (fillValues === null) {\n alteredQuery = true\n fillValues = DEFAULT_FILLVALUES\n }\n\n let builderConfig = get(q, 'builderConfig', {})\n builderConfig = {...builderConfig, aggregateWindow: {period, fillValues}}\n\n const originalQueryText = get(q, 'text', '')\n\n try {\n const text = alteredQuery ? buildQuery(builderConfig) : originalQueryText\n\n return {\n ...q,\n text,\n builderConfig,\n }\n } catch (e) {\n return originalQueryInScriptEditorMode\n }\n })\n\n return {\n ...view,\n properties: {...view.properties, queries: autoAggregateableQueries},\n }\n}\n\nexport default applyAutoAggregateRequirements\n","// Libraries\nimport {normalize} from 'normalizr'\n\n// APIs\nimport {\n getView as getViewAJAX,\n updateView as updateViewAJAX,\n} from 'src/dashboards/apis'\nimport {getCachedResultsOrRunQuery} from 'src/shared/apis/queryCache'\n\n// Constants\nimport * as copy from 'src/shared/copy/notifications'\nimport {viewSchema} from 'src/schemas'\n\n// Utils\nimport applyAutoAggregateRequirements from 'src/utils/autoAggregateRequirements'\nimport {getAllVariables} from 'src/variables/selectors'\n\n// Actions\nimport {notify} from 'src/shared/actions/notifications'\nimport {setActiveTimeMachine} from 'src/timeMachine/actions'\nimport {executeQueries} from 'src/timeMachine/actions/queries'\nimport {setView, Action} from 'src/views/actions/creators'\nimport {setQueryResults} from 'src/timeMachine/actions/queries'\n\n// Selectors\nimport {getViewsForDashboard} from 'src/views/selectors'\nimport {getByID} from 'src/resources/selectors'\nimport {getOrg} from 'src/organizations/selectors'\n\n// Types\nimport {\n RemoteDataState,\n QueryView,\n GetState,\n View,\n ViewEntities,\n TimeMachineID,\n ResourceType,\n} from 'src/types'\nimport {RunQuerySuccessResult} from 'src/shared/apis/query'\nimport {Dispatch} from 'redux'\n\nexport const getView =\n (dashboardID: string, cellID: string) =>\n async (dispatch: Dispatch): Promise => {\n dispatch(setView(cellID, RemoteDataState.Loading))\n try {\n const view = await getViewAJAX(dashboardID, cellID)\n\n const normView = normalize(view, viewSchema)\n\n dispatch(setView(cellID, RemoteDataState.Done, normView))\n } catch {\n dispatch(setView(cellID, RemoteDataState.Error))\n }\n }\n\nexport const updateView =\n (dashboardID: string, view: View) =>\n async (dispatch: Dispatch): Promise => {\n const viewID = view.cellID\n\n dispatch(setView(viewID, RemoteDataState.Loading))\n\n try {\n const newView = await updateViewAJAX(dashboardID, viewID, view)\n\n const normView = normalize(\n newView,\n viewSchema\n )\n\n dispatch(setView(viewID, RemoteDataState.Done, normView))\n\n return newView\n } catch (error) {\n console.error(error)\n dispatch(setView(viewID, RemoteDataState.Error))\n }\n }\n\nexport const updateViewAndVariables =\n (dashboardID: string, view: View) => async (dispatch, getState: GetState) => {\n const cellID = view.cellID\n\n try {\n const newView = await updateViewAJAX(dashboardID, cellID, view)\n\n const views = getViewsForDashboard(getState(), dashboardID)\n\n views.splice(\n views.findIndex(v => v.id === newView.id),\n 1,\n newView\n )\n\n const normView = normalize(\n newView,\n viewSchema\n )\n\n dispatch(setView(cellID, RemoteDataState.Done, normView))\n } catch (error) {\n console.error(error)\n dispatch(notify(copy.cellUpdateFailed()))\n dispatch(setView(cellID, RemoteDataState.Error))\n }\n }\n\nexport const getViewAndResultsForVEO =\n (dashboardID: string, cellID: string, timeMachineID: TimeMachineID) =>\n async (dispatch, getState: GetState): Promise => {\n try {\n const state = getState()\n let view = getByID(state, ResourceType.Views, cellID) as QueryView\n\n if (!view) {\n dispatch(setView(cellID, RemoteDataState.Loading))\n view = (await getViewAJAX(dashboardID, cellID)) as QueryView\n }\n\n const updatedView = applyAutoAggregateRequirements(view)\n\n dispatch(\n setActiveTimeMachine(timeMachineID, {\n contextID: dashboardID,\n view: updatedView,\n })\n )\n\n const queries = view.properties.queries.filter(({text}) => !!text.trim())\n if (!queries.length) {\n dispatch(setQueryResults(RemoteDataState.Done, [], null))\n }\n const {id: orgID} = getOrg(state)\n const pendingResults = queries.map(({text}) =>\n getCachedResultsOrRunQuery(orgID, text, getAllVariables(state))\n )\n\n // Wait for new queries to complete\n const results = await Promise.all(pendingResults.map(r => r.promise))\n const files = (results as RunQuerySuccessResult[]).map(r => r.csv)\n\n if (files) {\n dispatch(setQueryResults(RemoteDataState.Done, files, null, null))\n return\n }\n\n dispatch(executeQueries())\n } catch (error) {\n console.error(error)\n dispatch(notify(copy.getViewFailed(error.message)))\n dispatch(setView(cellID, RemoteDataState.Error))\n }\n }\n","import React, {FC} from 'react'\n\ninterface Props {\n href: string\n onClick?: any\n}\n\n// The purpose of this component is to provide a safe way to open links in a new tab/window\n// that aren't vulnerable to reverse tabnabbing https://owasp.org/www-community/attacks/Reverse_Tabnabbing\nexport const SafeBlankLink: FC = props => {\n const {children} = props\n return (\n \n {children}\n \n )\n}\n","import {getRootNode} from 'src/utils/nodes'\nimport {BASE_PATH, API_BASE_PATH} from 'src/shared/constants'\n\nexport const getBrowserBasepath = () => {\n const rootNode = getRootNode()\n if (!rootNode) {\n return ''\n }\n\n return rootNode.getAttribute('data-basepath') || ''\n}\n\nexport const getBasepath = () => {\n if (!BASE_PATH || BASE_PATH === '/') {\n return ''\n }\n\n return BASE_PATH.slice(0, -1)\n}\n\nexport const getAPIBasepath = () => {\n if (!API_BASE_PATH || API_BASE_PATH === '/') {\n return ''\n }\n\n return API_BASE_PATH.slice(0, -1)\n}\n\nexport const stripPrefix = (pathname, basepath = getBasepath()) => {\n if (basepath === '') {\n return pathname\n }\n\n const expr = new RegExp(`^${basepath}`)\n const matches = pathname.match(expr)\n if (matches) {\n return pathname.replace(expr, '')\n }\n}\n","import {Notification} from 'src/types'\nimport {FIVE_SECONDS} from 'src/shared/constants/index'\nimport {defaultErrorNotification} from 'src/shared/copy/notifications'\n\nexport const supportRequestError = (): Notification => ({\n ...defaultErrorNotification,\n duration: FIVE_SECONDS,\n message:\n 'There was a problem submitting your support request. Please wait a moment and try again.',\n})\n","export enum ConnectorState {\n None = 'none',\n Some = 'some',\n Full = 'full',\n}\n\nexport enum StepStatus {\n Incomplete = 'circle-thick',\n Complete = 'checkmark',\n Error = 'remove',\n}\n","export const SET_SCROLL = 'SET_SCROLL'\nexport const SET_CELL_MOUNT = 'SET_CELL_MOUNT'\nexport const SET_DASHBOARD_VISIT = 'SET_DASHBOARD_VISIT'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport type ComponentKey = 'dashboard'\nexport type ScrollState = 'not scrolled' | 'scrolled'\n\nexport const setScroll = (component: ComponentKey, scroll: ScrollState) =>\n ({\n type: SET_SCROLL,\n component,\n scroll,\n } as const)\n\nexport const setCellMount = (cellID: string, mountStartMs: number) =>\n ({\n type: SET_CELL_MOUNT,\n cellID,\n mountStartMs,\n } as const)\n\nexport const setDashboardVisit = (dashboardID: string, startVisitMs: number) =>\n ({\n type: SET_DASHBOARD_VISIT,\n dashboardID,\n startVisitMs,\n } as const)\n","export interface Duration {\n days: number\n hours: number\n minutes: number\n seconds: number\n}\n\nconst secondsToDuration = (seconds: number): Duration => {\n let minutes = Math.floor(seconds / 60)\n seconds = seconds % 60\n let hours = Math.floor(minutes / 60)\n minutes = minutes % 60\n const days = Math.floor(hours / 24)\n hours = hours % 24\n\n return {\n days,\n hours,\n minutes,\n seconds,\n }\n}\n\nexport const ruleToString = (seconds: number): string => {\n const duration = secondsToDuration(seconds)\n const rpString = Object.entries(duration).reduce((acc, [k, v]) => {\n if (!v) {\n return acc\n }\n\n return `${acc} ${v} ${k}`\n }, '')\n\n if (!rpString) {\n return 'forever'\n }\n\n return rpString\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {RemoteDataState, ResourceType, GenCheck, Check} from 'src/types'\n\n// Schemas\nimport {arrayOfLabels} from './labels'\n\n// Utils\nimport {getQueryFromFlux} from 'src/timeMachine/actions/queries'\n\n/* Checks */\n\n// Defines the schema for the \"checks\" resource\nexport const checkSchema = new schema.Entity(\n ResourceType.Checks,\n {\n labels: arrayOfLabels,\n },\n {\n processStrategy: (check: GenCheck): Omit => {\n if (!check.query.editMode) {\n return {\n ...check,\n query: getQueryFromFlux(check.query.text),\n status: RemoteDataState.Done,\n activeStatus: check.status,\n }\n }\n return {\n ...check,\n status: RemoteDataState.Done,\n activeStatus: check.status,\n }\n },\n }\n)\n\nexport const arrayOfChecks = [checkSchema]\n","// Libraries\nimport {isObject} from 'lodash'\n\n/*\n Find all nodes in a tree matching the `predicate` function. Each node in the\n tree is an object, which may contain objects or arrays of objects as children\n under any key.\n*/\nexport const findNodes = (\n node: any,\n predicate: (node: any) => boolean,\n acc: any[] = []\n) => {\n if (predicate(node)) {\n acc.push(node)\n }\n\n for (const value of Object.values(node)) {\n if (isObject(value)) {\n findNodes(value, predicate, acc)\n } else if (Array.isArray(value)) {\n for (const innerValue of value) {\n findNodes(innerValue, predicate, acc)\n }\n }\n }\n\n return acc\n}\n","// Utils\nimport {parseASTIM} from 'src/variables/utils/astim'\n\n// Types\nimport {QueryViewProperties, View, ViewProperties, Variable} from 'src/types'\n\nfunction isQueryViewProperties(vp: ViewProperties): vp is QueryViewProperties {\n return (vp as QueryViewProperties).queries !== undefined\n}\n\nexport const getAllUsedVars = (\n variables: Variable[],\n usedVars: Variable[],\n cache: {[name: string]: boolean}\n): Variable[] => {\n const vars = usedVars.slice()\n let varsInUse = []\n usedVars.forEach((vari: Variable) => {\n if (vari.arguments.type === 'query') {\n const queryText = vari?.arguments?.values?.query || ''\n const astim = parseASTIM(queryText)\n const usedV = variables.filter(variable =>\n astim.hasVariable(variable.name)\n )\n varsInUse = varsInUse.concat(usedV)\n }\n })\n\n varsInUse.forEach((v: Variable) => {\n if (!cache[v.name]) {\n vars.push(v)\n cache[v.name] = true\n }\n })\n\n if (vars.length !== usedVars.length) {\n return getAllUsedVars(variables, vars, cache)\n }\n\n return vars\n}\n\n/*\n Creates an initial cache of the variables used at the root level in a query\n*/\nexport const createdUsedVarsCache = (variables: Variable[]) => {\n return variables.reduce((cache, curr) => {\n cache[curr.name] = true\n return cache\n }, {})\n}\n\nexport const filterUnusedVarsBasedOnQuery = (\n variables: Variable[],\n queryTexts: string[]\n): Variable[] => {\n const astims = queryTexts.map(query => parseASTIM(query))\n const varsInUse = variables.filter(variable =>\n astims.some(astim => astim.hasVariable(variable.name))\n )\n const cachedVars = createdUsedVarsCache(varsInUse)\n\n return getAllUsedVars(variables, varsInUse, cachedVars)\n}\n\n/*\n Given a collection variables and a collection of views, return only the\n variables that are used in at least one of the view queries.\n*/\nexport const filterUnusedVars = (\n variables: Variable[],\n views: View[]\n): Variable[] => {\n const viewProperties = views.map(v => v.properties).filter(vp => !!vp)\n const queryViewProperties = viewProperties.filter(isQueryViewProperties)\n\n const queryTexts = queryViewProperties.reduce(\n (acc, vp) => [...acc, ...(vp.queries || []).map(query => query.text)],\n [] as Array\n )\n\n return filterUnusedVarsBasedOnQuery(variables, queryTexts)\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {RemoteDataState, ResourceType, Variable} from 'src/types'\nimport {labelSchema} from './labels'\n\n// Defines the schema for the \"variables\" resource\nexport const variableSchema = new schema.Entity(\n ResourceType.Variables,\n {\n labels: [labelSchema],\n },\n {\n processStrategy: (v: Variable): Variable => {\n return {\n ...v,\n status: RemoteDataState.Done,\n }\n },\n }\n)\nexport const arrayOfVariables = [variableSchema]\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Types\nimport {\n RemoteDataState,\n ResourceType,\n NotificationEndpoint,\n GenEndpoint,\n} from 'src/types'\n\n// Schemas\nimport {arrayOfLabels} from './labels'\n\n/* Endpoints */\nexport const endpointSchema = new schema.Entity(\n ResourceType.NotificationEndpoints,\n {\n labels: arrayOfLabels,\n },\n {\n processStrategy: point => addEndpointDefaults(point),\n }\n)\n\nexport const arrayOfEndpoints = [endpointSchema]\n\nconst addEndpointDefaults = (\n point: GenEndpoint\n): Omit => {\n return {\n ...point,\n status: RemoteDataState.Done,\n activeStatus: point.status,\n }\n}\n","// Libraries\nimport {schema} from 'normalizr'\n\n// Schemas\nimport {labelSchema} from './labels'\n\n// Utils\nimport {ruleToDraftRule} from 'src/notifications/rules/utils'\n\n// Types\nimport {ResourceType, GenRule, NotificationRuleDraft} from 'src/types'\n\n/* Rules */\nexport const ruleSchema = new schema.Entity(\n ResourceType.NotificationRules,\n {\n labels: [labelSchema],\n },\n {\n processStrategy: (rule: GenRule): NotificationRuleDraft => ({\n ...ruleToDraftRule(rule),\n }),\n }\n)\n\nexport const arrayOfRules = [ruleSchema]\n","import {CLOUD} from 'src/shared/constants'\n\nlet getBrokerSub = null\nlet GetBrokerSubParams = null\nlet getBrokerSubs = null\nlet postBrokerSub = null\nlet PostBrokerSubParams = null\nlet putBrokerSub = null\nlet PutBrokerSubParams = null\nlet deleteBrokerSub = null\nlet DeleteBrokerSubParams = null\nlet getBrokerSubsStatus = null\nlet GetBrokerSubsStatusParams = null\nlet putBrokerSubsStatus = null\nlet PutBrokerSubsStatusParams = null\nlet getBrokerSubsStatuses = null\n\nif (CLOUD) {\n getBrokerSub = require('src/client/subscriptionsRoutes').getBrokerSub\n GetBrokerSubParams =\n require('src/client/subscriptionsRoutes').GetBrokerSubParams\n getBrokerSubs = require('src/client/subscriptionsRoutes').getBrokerSubs\n postBrokerSub = require('src/client/subscriptionsRoutes').postBrokerSub\n PostBrokerSubParams =\n require('src/client/subscriptionsRoutes').PostBrokerSubParams\n putBrokerSub = require('src/client/subscriptionsRoutes').putBrokerSub\n PutBrokerSubParams =\n require('src/client/subscriptionsRoutes').PutBrokerSubParams\n deleteBrokerSub = require('src/client/subscriptionsRoutes').deleteBrokerSub\n DeleteBrokerSubParams =\n require('src/client/subscriptionsRoutes').DeleteBrokerSubParams\n getBrokerSubsStatus =\n require('src/client/subscriptionsRoutes').getBrokerSubsStatus\n GetBrokerSubsStatusParams =\n require('src/client/subscriptionsRoutes').GetBrokerSubsStatusParams\n putBrokerSubsStatus =\n require('src/client/subscriptionsRoutes').putBrokerSubsStatus\n PutBrokerSubsStatusParams =\n require('src/client/subscriptionsRoutes').PutBrokerSubsStatusParams\n getBrokerSubsStatuses =\n require('src/client/subscriptionsRoutes').getBrokerSubsStatuses\n}\n\nexport const createAPI = async (subscription: typeof PostBrokerSubParams) => {\n const res = await postBrokerSub(subscription)\n if (res.status === 400) {\n // 400s contain an err with info for the user\n throw new Error(res.data.message)\n }\n if (res.status !== 201) {\n throw new Error()\n }\n}\n\nexport const updateAPI = async (subscription: typeof PutBrokerSubParams) => {\n const res = await putBrokerSub(subscription)\n if (res.status === 400) {\n // 400s contain an err with info for the user\n throw new Error(res.data.message)\n }\n if (res.status !== 200) {\n throw new Error()\n }\n return res.data\n}\n\nexport const deleteAPI = async (id: typeof DeleteBrokerSubParams) => {\n const res = await deleteBrokerSub({id})\n if (res.status !== 204) {\n throw new Error()\n }\n}\n\nexport const getAllAPI = async () => {\n const res = await getBrokerSubs()\n if (res.status !== 200) {\n throw new Error()\n }\n return res.data\n}\n\nexport const getByIDAPI = async (id: typeof GetBrokerSubParams) => {\n const res = await getBrokerSub(id)\n if (res.status !== 200) {\n throw new Error()\n }\n return res.data\n}\n\nexport const getStatusAPI = async (id: typeof GetBrokerSubsStatusParams) => {\n const res = await getBrokerSubsStatus(id)\n if (res.status !== 200) {\n throw new Error()\n }\n return res.data\n}\n\nexport const updateStatusAPI = async (\n status: typeof PutBrokerSubsStatusParams\n) => {\n const res = await putBrokerSubsStatus(status)\n if (res.status === 400) {\n // 400s contain an err with info for the user\n throw new Error(res.data.message)\n }\n if (res.status !== 200) {\n throw new Error()\n }\n return res.data\n}\n\nexport const getAllStatuses = async () => {\n const res = await getBrokerSubsStatuses()\n if (res.status !== 200) {\n throw new Error()\n }\n\n return res.data\n}\n","export const DEFAULT_LIMIT = 1000\n","// Libraries\nimport React, {FunctionComponent} from 'react'\n\n// Components\nimport {Dropdown, ComponentStatus} from '@influxdata/clockface'\n\n// Utils\nimport {areDurationsEqual} from 'src/shared/utils/duration'\n\nexport interface DurationOption {\n duration: string\n displayText: string\n}\n\ninterface Props {\n selectedDuration: string\n onSelectDuration: (duration: string) => any\n durations: DurationOption[]\n disabled?: boolean\n}\n\nconst DurationSelector: FunctionComponent = ({\n selectedDuration,\n onSelectDuration,\n durations,\n disabled = false,\n}) => {\n let resolvedDurations = durations\n let selected: DurationOption = durations.find(\n d =>\n selectedDuration === d.duration ||\n areDurationsEqual(selectedDuration, d.duration)\n )\n\n if (!selected) {\n selected = {duration: selectedDuration, displayText: selectedDuration}\n resolvedDurations = [selected, ...resolvedDurations]\n }\n\n return (\n (\n \n {selected.displayText}\n \n )}\n menu={onCollapse => (\n \n {resolvedDurations.map(({duration, displayText}) => (\n \n {displayText}\n \n ))}\n \n )}\n />\n )\n}\n\nconst getStatus = (disabled: boolean): ComponentStatus => {\n if (disabled) {\n return ComponentStatus.Disabled\n }\n\n return ComponentStatus.Default\n}\n\nexport default DurationSelector\n","// Libraries\nimport React, {FC} from 'react'\n\n// Components\nimport {Dropdown, DropdownMenuTheme} from '@influxdata/clockface'\nimport ColorSchemeDropdownItem from 'src/visualization/components/internal/ColorSchemeDropdownItem'\n\n// Constants\nimport {LINE_COLOR_SCALES} from 'src/shared/constants/graphColorPalettes'\n\n// Types\nimport {Color} from 'src/types/colors'\n\ninterface Props {\n value: Color[]\n onChange: (colors: Color[]) => void\n}\n\ninterface Scale {\n name: string\n id: string\n colors: Array<{hex: string}>\n}\n\nconst findSelectedScale = (colors: Color[]): Scale => {\n const key = (colors: Color[]) => colors.map(color => color.hex).join(', ')\n const needle = key(colors)\n const selectedScale = LINE_COLOR_SCALES.find(\n d => key(d.colors as Color[]) === needle\n )\n\n if (selectedScale) {\n return selectedScale\n } else {\n return LINE_COLOR_SCALES[0]\n }\n}\n\nconst ColorSchemeDropdown: FC = ({value, onChange}) => {\n const selectedScale = findSelectedScale(value)\n\n return (\n (\n \n c.hex)}\n />\n \n )}\n menu={onCollapse => (\n \n {LINE_COLOR_SCALES.map(({id, name, colors}) => (\n \n c.hex)}\n />\n \n ))}\n \n )}\n />\n )\n}\n\nexport default ColorSchemeDropdown\n","import {normalize} from 'normalizr'\n\nimport {getBuckets} from 'src/client'\n\nimport {arrayOfBuckets} from 'src/schemas'\nimport {Bucket, BucketEntities} from 'src/types'\n\nimport {BUCKET_LIMIT} from 'src/resources/constants'\n\nexport const fetchAllBuckets = async (orgID: string, limit = BUCKET_LIMIT) => {\n const resp = await getBuckets({\n query: {orgID, limit},\n })\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n return {\n buckets: resp.data.buckets,\n normalizedBuckets: normalize(\n [...resp.data.buckets],\n arrayOfBuckets\n ),\n }\n}\n","export * from './alerting'\nexport * from './annotation'\nexport * from './app'\nexport * from './arguments'\nexport * from './ast'\nexport * from './auth'\nexport * from './autoRefresh'\nexport * from './billing'\nexport * from './buckets'\nexport * from './checks'\nexport * from './colors'\nexport * from './common'\nexport * from './dashboards'\nexport * from './dataExplorer'\nexport * from './dataLoaders'\nexport * from './documents'\nexport * from './eventViewer'\nexport * from './flux'\nexport * from './form'\nexport * from './geo'\nexport * from './histogram'\nexport * from './hosts'\nexport * from './influxAdmin'\nexport * from './labels'\nexport * from './layouts'\nexport * from './layouts'\nexport * from './localStorage'\nexport * from './logEvent'\nexport * from './me'\nexport * from './members'\nexport * from './monaco'\nexport * from './flows'\nexport * from './notifications'\nexport * from './operator'\nexport * from './orgs'\nexport * from './overlay'\nexport * from './promises'\nexport * from './queries'\nexport * from './redux'\nexport * from './resources'\nexport * from './run'\nexport * from './schemas'\nexport * from './scrapers'\nexport * from './secrets'\nexport * from './services'\nexport * from './shared'\nexport * from './sources'\nexport * from './stores'\nexport * from './tasks'\nexport * from './telegraf'\nexport * from './templates'\nexport * from './timeMachine'\nexport * from './timeZones'\nexport * from './users'\nexport * from './variables'\nexport * from './views'\nexport * from './subscriptions'\n","// Libraries\nimport React, {Component, ErrorInfo, memo, ReactChild} from 'react'\nimport {isEqual} from 'lodash'\n\n// Components\nimport DefaultErrorMessage from 'src/shared/components/DefaultErrorMessage'\n\n// Utils\nimport {\n reportErrorThroughHoneyBadger,\n parseComponentName,\n} from 'src/shared/utils/errors'\n\n// Types\nimport {ErrorMessageComponent} from 'src/types'\n\ninterface ErrorBoundaryProps {\n errorComponent: ErrorMessageComponent\n children: ReactChild | ReactChild[]\n}\n\ninterface ErrorBoundaryState {\n error: Error\n}\n\nclass ErrorBoundary extends Component {\n public static defaultProps = {errorComponent: DefaultErrorMessage}\n\n public state: ErrorBoundaryState = {error: null}\n\n public static getDerivedStateFromError(error: Error) {\n return {error}\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n reportErrorThroughHoneyBadger(error, {\n component: parseComponentName(errorInfo),\n })\n }\n\n public shouldComponentUpdate() {\n if (this.state.error) {\n this.setState(() => {\n return {error: null}\n })\n }\n\n return true\n }\n\n public render() {\n const {error} = this.state\n\n if (error) {\n return \n }\n\n return this.props.children\n }\n}\n\nexport default memo(ErrorBoundary, (prev, next) => isEqual(prev, next))\n","import React, {FC, useCallback, useRef, useState, useEffect} from 'react'\nimport {Flow, PipeData, PipeMeta} from 'src/types/flows'\nimport {customAlphabet} from 'nanoid'\nimport {PIPE_DEFINITIONS, PROJECT_NAME_PLURAL} from 'src/flows'\nimport {isFlagEnabled} from 'src/shared/utils/featureFlag'\nimport {Doc} from 'yjs'\nimport {WebsocketProvider} from 'y-websocket'\nimport {serialize, hydrate} from 'src/flows/context/flow.list'\nimport {useParams} from 'react-router-dom'\nimport {\n deleteNotebook,\n getNotebook,\n postNotebook,\n} from 'src/client/notebooksRoutes'\nimport {event} from 'src/cloud/utils/reporting'\nimport {pooledUpdateAPI} from 'src/flows/context/api'\nimport {useDispatch} from 'react-redux'\nimport {notify} from 'src/shared/actions/notifications'\nimport {\n notebookDeleteFail,\n notebookDeleteSuccess,\n} from 'src/shared/copy/notifications'\nimport PageSpinner from 'src/perf/components/PageSpinner'\nimport {pageTitleSuffixer} from 'src/shared/utils/pageTitles'\nimport {RemoteDataState} from '@influxdata/clockface'\nimport {setCloneName} from 'src/utils/naming'\n\nconst prettyid = customAlphabet('abcdefghijklmnop0123456789', 12)\n\nexport interface FlowContextType {\n flow: Flow | null\n add: (data: Partial, index?: number) => string\n cloneNotebook: () => void\n deleteNotebook: () => void\n updateData: (id: string, data: Partial) => void\n updateMeta: (id: string, meta: Partial) => void\n updateOther: (flow: Partial) => void\n remove: (id: string) => void\n populate: (data: Flow) => void\n}\n\nexport const DEFAULT_CONTEXT: FlowContextType = {\n flow: null,\n add: _ => '',\n cloneNotebook: () => {},\n deleteNotebook: () => {},\n updateData: (_, __) => {},\n updateMeta: (_, __) => {},\n updateOther: _ => {},\n remove: _ => {},\n populate: _ => null,\n}\n\nexport const FlowContext = React.createContext(DEFAULT_CONTEXT)\n\nlet GENERATOR_INDEX = 0\n\nconst WEBSOCKET_AUTH_FAILED = 4000\n\nexport const FlowProvider: FC = ({children}) => {\n const dispatch = useDispatch()\n const {id, orgID} = useParams<{id: string; orgID: string}>()\n const [currentFlow, setCurrentFlow] = useState()\n const [loading, setLoading] = useState(\n RemoteDataState.NotStarted\n )\n const provider = useRef()\n const yDoc = useRef(new Doc())\n function disconnectProvider() {\n if (provider.current) {\n provider.current.disconnect()\n }\n }\n\n const handleDeleteNotebook = useCallback(async () => {\n event('delete_notebook')\n try {\n const response = await deleteNotebook({id})\n\n if (response.status !== 204) {\n throw new Error(response.data.message)\n }\n\n dispatch(notify(notebookDeleteSuccess()))\n return id\n } catch (error) {\n dispatch(notify(notebookDeleteFail()))\n }\n }, [dispatch, id])\n\n const handleCloneNotebook = useCallback(async () => {\n try {\n const _flow = serialize({\n ...currentFlow,\n name: setCloneName(currentFlow.name),\n })\n delete _flow.data.id\n\n const response = await postNotebook(_flow)\n\n if (response.status !== 200) {\n throw new Error(response.data.message)\n }\n\n return response.data.id\n } catch (error) {\n console.error({error})\n }\n }, [currentFlow, orgID])\n\n const handleGetNotebook = useCallback(async notebookId => {\n try {\n setLoading(RemoteDataState.Loading)\n const response = await getNotebook({id: notebookId})\n\n if (response.status !== 200) {\n throw new Error(response.data.message)\n }\n\n setCurrentFlow(hydrate(response.data))\n setLoading(RemoteDataState.Done)\n } catch (error) {\n console.error({error})\n setLoading(RemoteDataState.Error)\n }\n }, [])\n\n useEffect(() => {\n if (id) {\n event('Notebook Accessed', {notebookID: id})\n handleGetNotebook(id)\n }\n }, [handleGetNotebook, id])\n\n const syncFunc = useCallback(\n (isSynced: boolean) => {\n if (!isSynced || !yDoc.current) {\n return\n }\n const {flowUpdateData} = yDoc.current.getMap('flowUpdateData')\n ? yDoc.current.getMap('flowUpdateData').toJSON()\n : {flowUpdateData: null} // necessary to avoid an error since flowUpdateData is destructured in assignment\n if (!flowUpdateData && currentFlow) {\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(currentFlow))\n }\n },\n [currentFlow]\n )\n\n const closeFunc = useCallback(event => {\n if (event.code === WEBSOCKET_AUTH_FAILED) {\n provider.current.disconnect()\n }\n }, [])\n\n useEffect(() => {\n const doc = yDoc.current\n if (isFlagEnabled('sharedFlowEditing') && id) {\n provider.current = new WebsocketProvider(\n `wss://${window.location.host}/api/workbench`,\n id,\n doc\n )\n\n provider.current.on('sync', syncFunc)\n provider.current.on('connection-close', closeFunc)\n }\n\n const onUpdate = () => {\n const {flowUpdateData} = doc.getMap('flowUpdateData').toJSON()\n const hydrated = hydrate(flowUpdateData?.data)\n\n setCurrentFlow(hydrated)\n }\n\n doc.on('update', onUpdate)\n return () => {\n if (isFlagEnabled('sharedFlowEditing')) {\n disconnectProvider()\n }\n doc.off('update', onUpdate)\n }\n }, [id])\n\n const update = useCallback(\n (flow: Flow) => {\n setCurrentFlow(prev => ({\n ...prev,\n ...flow,\n }))\n\n const apiFlow = serialize({\n ...flow,\n })\n\n pooledUpdateAPI({id, ...apiFlow})\n },\n [id]\n )\n\n const updateData = useCallback(\n (id: string, data: Partial) => {\n if (isFlagEnabled('sharedFlowEditing')) {\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n if (flowCopy?.data?.byID[id]) {\n flowCopy.data.byID[id] = {\n ...(flowCopy.data.byID[id] || {}),\n ...data,\n }\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(flowCopy))\n }\n return\n }\n\n currentFlow.data.byID[id] = {\n ...(currentFlow.data.byID[id] || {}),\n ...data,\n }\n\n // this should update the useEffect on the next time around\n update(currentFlow)\n },\n [currentFlow, update]\n )\n\n const updateMeta = useCallback(\n (id: string, meta: Partial) => {\n if (isFlagEnabled('sharedFlowEditing')) {\n if (currentFlow?.meta?.byID[id]) {\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n flowCopy.meta.byID[id] = {\n title: '',\n visible: true,\n ...(flowCopy.meta.byID[id] || {}),\n ...meta,\n }\n\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(flowCopy))\n }\n return\n }\n\n currentFlow.meta.byID[id] = {\n title: '',\n visible: true,\n ...(currentFlow.meta.byID[id] || {}),\n ...meta,\n }\n\n // this should update the useEffect on the next time around\n update(currentFlow)\n },\n [currentFlow, update]\n )\n\n const updateOther = useCallback(\n (flow: Partial) => {\n if (isFlagEnabled('sharedFlowEditing')) {\n if (currentFlow) {\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n for (const ni in flow) {\n flowCopy[ni] = flow[ni]\n }\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(flowCopy))\n }\n return\n }\n\n for (const prop in flow) {\n currentFlow[prop] = flow[prop]\n }\n\n update(currentFlow)\n },\n [currentFlow, update]\n )\n\n const addPipe = (initialTemplate: PipeData, index?: number) => {\n const initial = JSON.parse(JSON.stringify(initialTemplate))\n const id = prettyid()\n const title =\n initial.title ||\n `${PIPE_DEFINITIONS[initial.type].button || 'Panel'} ${++GENERATOR_INDEX}`\n\n delete initial.title\n initial.id = id\n\n if (isFlagEnabled('sharedFlowEditing')) {\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n flowCopy.data.byID[id] = initial\n flowCopy.meta.byID[id] = {\n title,\n visible: true,\n }\n if (typeof index !== 'undefined') {\n flowCopy.data.allIDs.splice(index + 1, 0, id)\n flowCopy.meta.allIDs.splice(index + 1, 0, id)\n } else {\n flowCopy.data.allIDs.push(id)\n flowCopy.meta.allIDs.push(id)\n }\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(flowCopy))\n return\n }\n\n currentFlow.data.byID[id] = initial\n currentFlow.meta.byID[id] = {\n title,\n visible: true,\n }\n\n if (typeof index !== 'undefined') {\n currentFlow.data.allIDs.splice(index + 1, 0, id)\n currentFlow.meta.allIDs.splice(index + 1, 0, id)\n } else {\n currentFlow.data.allIDs.push(id)\n currentFlow.meta.allIDs.push(id)\n }\n\n updateData(id, {})\n updateMeta(id, {})\n\n return id\n }\n\n const removePipe = (id: string) => {\n const definition = PIPE_DEFINITIONS[currentFlow.data.byID[id].type]\n if (definition?.beforeRemove) {\n definition.beforeRemove(currentFlow.data.byID[id])\n }\n\n if (isFlagEnabled('sharedFlowEditing')) {\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n\n flowCopy.meta.allIDs = flowCopy.meta.allIDs.filter(_id => _id !== id)\n flowCopy.data.allIDs = flowCopy.data.allIDs.filter(_id => _id !== id)\n\n delete flowCopy.data.byID[id]\n delete flowCopy.meta.byID[id]\n yDoc.current\n .getMap('flowUpdateData')\n .set('flowUpdateData', serialize(flowCopy))\n return\n }\n\n const flowCopy = JSON.parse(JSON.stringify(currentFlow))\n\n flowCopy.meta.allIDs = flowCopy.meta.allIDs.filter(_id => _id !== id)\n flowCopy.data.allIDs = flowCopy.data.allIDs.filter(_id => _id !== id)\n\n delete flowCopy.data.byID[id]\n delete flowCopy.meta.byID[id]\n\n update(flowCopy)\n }\n\n document.title = pageTitleSuffixer([currentFlow?.name, PROJECT_NAME_PLURAL])\n\n return (\n \n \n {children}\n \n \n )\n}\n\nconst CurrentFlow: FC = ({children}) => {\n return {children}\n}\n\nexport default CurrentFlow\n","import {ASSET_LIMIT_ERROR_STATUS} from 'src/cloud/constants/index'\nimport {LimitStatus} from 'src/cloud/actions/limits'\nimport {AppState} from 'src/types'\nimport {CLOUD} from 'src/shared/constants'\n\nexport const isLimitError = (error): boolean => {\n if (!CLOUD) {\n return false\n }\n return error?.response?.status === ASSET_LIMIT_ERROR_STATUS\n}\n\nexport const getBucketLimitStatus = (\n state: AppState\n): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n return state.cloud?.limits?.buckets?.limitStatus\n}\n\nexport const extractBucketMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.buckets?.maxAllowed || Infinity // if maxAllowed == 0, there are no limits on asset\n}\n\nexport const extractBucketMaxRetentionSeconds = (state: AppState): number => {\n if (!CLOUD) {\n return null\n }\n return state.cloud?.limits?.buckets?.maxRetentionSeconds || null\n}\n\nexport const getBucketRetentionLimit = (state: AppState): boolean => {\n if (!CLOUD) {\n return false\n }\n const maxSeconds = state.cloud?.limits?.buckets?.maxRetentionSeconds\n return !!maxSeconds\n}\n\nexport const extractDashboardLimits = (\n state: AppState\n): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n return state.cloud?.limits?.dashboards?.limitStatus\n}\n\nexport const extractDashboardMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.dashboards?.maxAllowed || Infinity\n}\n\nexport const extractTaskLimits = (state: AppState): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n return state.cloud?.limits?.tasks.limitStatus\n}\n\nexport const extractTaskMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.tasks?.maxAllowed || Infinity\n}\n\nexport const extractChecksLimits = (state: AppState): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n return state.cloud?.limits?.checks?.limitStatus\n}\n\nexport const extractChecksMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.checks?.maxAllowed || Infinity\n}\n\nexport const extractRulesLimits = (state: AppState): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n return state.cloud?.limits?.rules?.limitStatus\n}\n\nexport const extractRulesMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.rules?.maxAllowed || Infinity\n}\n\nexport const extractEndpointsLimits = (\n state: AppState\n): LimitStatus['status'] => {\n if (!CLOUD) {\n ;('ok')\n }\n return state.cloud?.limits?.endpoints?.limitStatus\n}\n\nexport const extractEndpointsMax = (state: AppState): number => {\n if (!CLOUD) {\n return Infinity\n }\n return state.cloud?.limits?.endpoints?.maxAllowed || Infinity\n}\n\nexport const extractBlockedEndpoints = (state: AppState): string[] => {\n if (!CLOUD) {\n return []\n }\n return state.cloud?.limits?.endpoints.blocked || []\n}\n\nexport const extractRateLimitStatus = (\n state: AppState\n): LimitStatus['status'] => {\n if (!CLOUD) {\n return 'ok'\n }\n\n const statuses = [\n state.cloud?.limits?.rate?.writeKBs?.limitStatus,\n state.cloud?.limits?.rate?.readKBs?.limitStatus,\n state.cloud?.limits?.rate?.cardinality?.limitStatus,\n ]\n\n if (statuses.includes('exceeded')) {\n return 'exceeded'\n }\n\n return 'ok'\n}\n\nexport const extractRateLimitResources = (state: AppState): string[] => {\n const rateLimitedResources = []\n\n if (!CLOUD) {\n return rateLimitedResources\n }\n\n if (state.cloud?.limits?.rate?.readKBs?.limitStatus === 'exceeded') {\n rateLimitedResources.push('read')\n }\n\n if (state.cloud?.limits?.rate?.writeKBs?.limitStatus === 'exceeded') {\n rateLimitedResources.push('write')\n }\n\n if (state.cloud?.limits?.rate?.cardinality?.limitStatus === 'exceeded') {\n rateLimitedResources.push('cardinality')\n }\n\n return rateLimitedResources\n}\n","// Libraries\nimport React, {FC, CSSProperties} from 'react'\nimport {capitalize} from 'lodash'\n\n// Components\nimport {\n Dropdown,\n ComponentStatus,\n DropdownMenuTheme,\n} from '@influxdata/clockface'\n\n// Types\nimport {ColorLabel} from 'src/types/colors'\n\ninterface PassedProps {\n selected: ColorLabel\n colors: ColorLabel[]\n onChoose: (colors: ColorLabel) => void\n}\n\ninterface DefaultProps {\n disabled?: boolean\n style?: CSSProperties\n}\n\ntype Props = PassedProps & DefaultProps\n\nconst ColorDropdown: FC = props => {\n const {selected, colors, onChoose, disabled, style} = props\n\n const status = disabled ? ComponentStatus.Disabled : ComponentStatus.Default\n\n return (\n (\n \n
\n \n
\n {capitalize(selected.name)}\n
\n
\n
\n )}\n menu={onCollapse => (\n \n {colors.map(color => (\n \n
\n \n
\n {capitalize(color.name)}\n
\n
\n \n ))}\n
\n )}\n />\n )\n}\n\nColorDropdown.defaultProps = {\n disabled: false,\n style: {flex: '0 0 120px'},\n}\n\nexport default ColorDropdown\n","// Libraries\nimport React, {FunctionComponent} from 'react'\n\n// Components\nimport {\n Input,\n SquareButton,\n IconFont,\n ComponentStatus,\n TextBlock,\n FlexBox,\n ComponentSize,\n FlexDirection,\n AlignItems,\n} from '@influxdata/clockface'\nimport ColorDropdown from 'src/shared/components/ColorDropdown'\n\n// Constants\nimport {\n THRESHOLD_COLORS,\n BASE_THRESHOLD_ID,\n COLOR_TYPE_MIN,\n COLOR_TYPE_MAX,\n} from 'src/shared/constants/thresholds'\n\ninterface Props {\n id: string\n type: string\n name: string\n value: string\n error?: string\n onChangeValue: (value: string) => void\n onChangeColor: (name: string, hex: string) => void\n onRemove: () => void\n onBlur: () => void\n}\n\nconst ThresholdSetting: FunctionComponent = ({\n id,\n type,\n name,\n value,\n error,\n onChangeValue,\n onChangeColor,\n onRemove,\n onBlur,\n}) => {\n const isBaseThreshold = id === BASE_THRESHOLD_ID\n\n let label: string = ''\n\n if (isBaseThreshold) {\n label = 'Base'\n } else if (type === COLOR_TYPE_MIN) {\n label = 'Minimum'\n } else if (type === COLOR_TYPE_MAX) {\n label = 'Maximum'\n } else {\n label = 'Value is >='\n }\n\n const isRemoveable =\n !isBaseThreshold && type !== COLOR_TYPE_MIN && type !== COLOR_TYPE_MAX\n\n const inputStatus = error ? ComponentStatus.Error : ComponentStatus.Default\n\n const dropdownStyle = isBaseThreshold\n ? {flex: '1 0 120px'}\n : {flex: '0 0 120px'}\n\n return (\n <>\n \n \n {!isBaseThreshold && (\n onChangeValue(e.target.value)}\n onBlur={onBlur}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n onBlur()\n }\n }}\n />\n )}\n d.name === name)}\n onChoose={({name, hex}) => onChangeColor(name, hex)}\n style={dropdownStyle}\n />\n {isRemoveable && (\n \n )}\n \n {error && (\n \n {error}\n \n )}\n \n )\n}\n\nexport default ThresholdSetting\n","// Libraries\nimport {nanoid} from 'nanoid'\n\n// Constants\nimport {\n THRESHOLD_COLORS,\n DEFAULT_VALUE_MIN,\n DEFAULT_VALUE_MAX,\n COLOR_TYPE_THRESHOLD,\n COLOR_TYPE_MIN,\n COLOR_TYPE_MAX,\n BASE_THRESHOLD_ID,\n} from 'src/shared/constants/thresholds'\n\n// Types\nimport {Color} from 'src/types'\n\n/*\n Sort a list of thresholds for rendering.\n\n - Base or minimum thresholds come first\n - Max thresholds come last\n - All other thresholds are sorted by value\n\n*/\nexport const sortThresholds = (thresholds: Color[]): Color[] => {\n const result = [...thresholds]\n\n result.sort((a, b) =>\n a.id === BASE_THRESHOLD_ID ? -Infinity : a.value - b.value\n )\n\n return result\n}\n\n/*\n Given a list of thresholds, return an object of error messages for any\n invalid threshold in the list.\n\n A threshold is invalid if:\n\n - Its value is NaN\n - Its value is less than the min threshold in the list\n - Its value is more than the max threshold in the list\n\n*/\nexport const validateThresholds = (\n thresholds: Color[]\n): {[thresholdID: string]: string} => {\n const minThreshold = thresholds.find(({type}) => type === COLOR_TYPE_MIN)\n const maxThreshold = thresholds.find(({type}) => type === COLOR_TYPE_MAX)\n const errors = {}\n\n for (const {id, value, type} of thresholds) {\n if (isNaN(value)) {\n errors[id] = 'Please enter a valid number'\n } else if (\n minThreshold &&\n type !== COLOR_TYPE_MIN &&\n value < minThreshold.value\n ) {\n errors[id] = 'Please enter a value greater than the minimum threshold'\n } else if (\n maxThreshold &&\n type !== COLOR_TYPE_MAX &&\n value > maxThreshold.value\n ) {\n errors[id] = 'Please enter a value less than the maximum threshold'\n }\n }\n\n return errors\n}\n\n/*\n Given a list of thresholds, produce a new threshold that is suitable for\n adding to the list.\n*/\nexport const addThreshold = (thresholds: Color[]): Color => {\n const values = thresholds.map(threshold => threshold.value)\n\n let minValue = Math.min(...values)\n let maxValue = Math.max(...values)\n\n if (minValue === Infinity || isNaN(minValue) || minValue === maxValue) {\n minValue = DEFAULT_VALUE_MIN\n maxValue = DEFAULT_VALUE_MAX\n }\n\n const value = randomTick(minValue, maxValue)\n\n const colorChoice =\n THRESHOLD_COLORS[Math.floor(Math.random() * THRESHOLD_COLORS.length)]\n\n const firstThresholdType = thresholds[0].type\n\n const thresholdType =\n firstThresholdType === COLOR_TYPE_MIN ||\n firstThresholdType === COLOR_TYPE_MAX\n ? COLOR_TYPE_THRESHOLD\n : firstThresholdType\n\n const threshold = {\n ...colorChoice,\n id: nanoid(),\n type: thresholdType,\n value,\n }\n\n return threshold\n}\n\n/*\n Generate a nice random number between `min` and `max` inclusive.\n*/\nconst randomTick = (min: number, max: number): number => {\n const domainWidth = max - min\n\n let roundTo\n\n if (domainWidth > 1000) {\n roundTo = 100\n } else if (domainWidth > 100) {\n roundTo = 10\n } else if (domainWidth > 50) {\n roundTo = 5\n } else if (domainWidth > 10) {\n roundTo = 1\n } else {\n roundTo = null\n }\n\n let value: number\n\n if (roundTo) {\n value = Math.round((Math.random() * (max - min)) / roundTo) * roundTo\n } else {\n value = Number((Math.random() * (max - min)).toFixed(2))\n }\n\n return value\n}\n","// Libraries\nimport React, {useMemo, useEffect, FunctionComponent} from 'react'\n\n// Components\nimport ThresholdSetting from 'src/shared/components/ThresholdSetting'\nimport {\n Button,\n ButtonShape,\n IconFont,\n FlexBox,\n ComponentSize,\n FlexDirection,\n AlignItems,\n} from '@influxdata/clockface'\n\n// Utils\nimport {useOneWayReducer} from 'src/shared/utils/useOneWayReducer'\nimport {\n sortThresholds,\n validateThresholds,\n addThreshold,\n} from 'src/visualization/components/internal/utils'\n\n// Types\nimport {Color} from 'src/types'\n\ninterface Props {\n thresholds: Color[]\n onSetThresholds: (thresholds: Color[]) => void\n}\n\ninterface State {\n thresholds: Color[]\n inputs: {[thresholdID: string]: string}\n errors: {[thresholdID: string]: string}\n isValid: boolean\n isDirty: boolean\n}\n\ntype Action =\n | {type: 'COLOR_CHANGED'; id: string; name: string; hex: string}\n | {type: 'VALUE_CHANGED'; id: string; value: string}\n | {type: 'VALUE_BLURRED'; id: string}\n | {type: 'THRESHOLD_REMOVED'; id: string}\n | {type: 'THRESHOLD_ADDED'}\n\nconst reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case 'COLOR_CHANGED': {\n const {id, name, hex} = action\n\n const thresholds = state.thresholds.map(threshold =>\n threshold.id === id ? {...threshold, name, hex} : threshold\n )\n\n return {...state, thresholds, isDirty: true}\n }\n\n case 'VALUE_CHANGED': {\n const {id, value} = action\n\n const inputs = {...state.inputs, [id]: value}\n\n return {...state, inputs, isDirty: true, isValid: false}\n }\n\n case 'VALUE_BLURRED': {\n const thresholds = state.thresholds.map(threshold =>\n threshold.id === action.id\n ? {...threshold, value: parseFloat(state.inputs[action.id])}\n : threshold\n )\n\n const errors = validateThresholds(thresholds)\n\n const isValid = Object.values(errors).length === 0\n\n return {...state, thresholds, errors, isValid}\n }\n\n case 'THRESHOLD_ADDED': {\n const newThreshold = addThreshold(state.thresholds)\n\n const thresholds = sortThresholds([...state.thresholds, newThreshold])\n\n const inputs = {\n ...state.inputs,\n [newThreshold.id]: String(newThreshold.value),\n }\n\n return {...state, thresholds, inputs, isDirty: true}\n }\n\n case 'THRESHOLD_REMOVED': {\n const thresholds = state.thresholds.filter(\n threshold => threshold.id !== action.id\n )\n\n return {...state, thresholds, isDirty: true}\n }\n\n default:\n const unknownAction: never = action\n const unknownActionType = (unknownAction as any).type\n\n throw new Error(\n `unhandled action of type \"${unknownActionType}\" in ThresholdsSettings`\n )\n }\n}\n\nconst ThresholdsSettings: FunctionComponent = ({\n thresholds,\n onSetThresholds,\n}) => {\n const initialState: State = useMemo(\n () => ({\n thresholds: sortThresholds(\n JSON.parse(\n JSON.stringify(thresholds.filter(({type}) => type !== 'scale'))\n )\n ),\n inputs: thresholds.reduce(\n (acc, {id, value}) => ({...acc, [id]: String(value)}),\n {}\n ),\n errors: {},\n isDirty: false,\n isValid: true,\n }),\n [thresholds]\n )\n\n const [state, dispatch] = useOneWayReducer(reducer, initialState)\n\n useEffect(() => {\n if (state.isDirty && state.isValid) {\n onSetThresholds(state.thresholds)\n }\n }, [state])\n\n return (\n \n dispatch({type: 'THRESHOLD_ADDED'})}\n />\n {state.thresholds.map(threshold => {\n const onChangeValue = value =>\n dispatch({\n type: 'VALUE_CHANGED',\n id: threshold.id,\n value,\n })\n\n const onChangeColor = (name, hex) =>\n dispatch({\n type: 'COLOR_CHANGED',\n id: threshold.id,\n name,\n hex,\n })\n\n const onRemove = () =>\n dispatch({\n type: 'THRESHOLD_REMOVED',\n id: threshold.id,\n })\n\n const onBlur = () =>\n dispatch({\n type: 'VALUE_BLURRED',\n id: threshold.id,\n })\n\n return (\n \n )\n })}\n \n )\n}\n\nexport default ThresholdsSettings\n","import {\n useRef,\n useReducer,\n useCallback,\n Reducer,\n ReducerState,\n ReducerAction,\n Dispatch,\n} from 'react'\n\n/*\n Works like `useReducer`, except if the `defaultState` argument changes then\n the reducer state will reset to `defaultState`.\n\n It is assumed that the passed `reducer` function has a stable identity over\n the lifetime of the component.\n*/\nexport const useOneWayReducer = >(\n reducer: R,\n defaultState: ReducerState\n): [ReducerState, Dispatch>] => {\n // The value of `defaultState` the last time the hook was called\n const prevDefaultState = useRef(defaultState)\n\n // Whether or not the next run of the reducer should be against its internal\n // state, or against the defaultState\n const reduceDefaultState = useRef(false)\n\n const wrappedReducer = useCallback(\n (state: ReducerState, action: ReducerAction) => {\n if (reduceDefaultState.current) {\n reduceDefaultState.current = false\n\n return reducer(prevDefaultState.current, action)\n }\n\n return reducer(state, action)\n },\n [reducer]\n )\n\n const [reducerState, dispatch] = useReducer(wrappedReducer, defaultState)\n\n if (defaultState !== prevDefaultState.current) {\n reduceDefaultState.current = true\n prevDefaultState.current = defaultState\n\n return [defaultState, dispatch]\n }\n\n return [reducerState, dispatch]\n}\n","import {RemoteDataState} from 'src/types'\nexport const SET_FEATURE_FLAGS = 'SET_FEATURE_FLAGS'\nexport const SET_PUBLIC_FEATURE_FLAGS = 'SET_PUBLIC_FEATURE_FLAGS'\nexport const RESET_FEATURE_FLAGS = 'RESET_FEATURE_FLAGS'\nexport const CLEAR_FEATURE_FLAG_OVERRIDES = 'CLEAR_FEATURE_FLAG_OVERRIDES'\nexport const SET_FEATURE_FLAG_OVERRIDE = 'SET_FEATURE_FLAG_OVERRIDE'\nexport const SET_FEATURE_FLAG_OVERRIDES = 'SET_FEATURE_FLAG_OVERRIDES'\nexport interface FlagMap {\n [key: string]: string | boolean\n}\n\nexport type Actions =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\n// NOTE: this doesnt have a type as it will be determined\n// by the backend at a later time and keeping the format\n// open for transformations in a bit\nexport const setFlags = (status: RemoteDataState, flags?: FlagMap) =>\n ({\n type: SET_FEATURE_FLAGS,\n payload: {\n status,\n flags,\n },\n } as const)\n\nexport const setPublicFlags = (flags?: FlagMap) =>\n ({\n type: SET_PUBLIC_FEATURE_FLAGS,\n payload: {\n flags,\n },\n } as const)\n\nexport const reset = () =>\n ({\n type: RESET_FEATURE_FLAGS,\n } as const)\n\nexport const clearOverrides = () =>\n ({\n type: CLEAR_FEATURE_FLAG_OVERRIDES,\n } as const)\n\nexport const setOverride = (flag: string, value: string | boolean) =>\n ({\n type: SET_FEATURE_FLAG_OVERRIDE,\n payload: {\n [flag]: value,\n },\n } as const)\n\nexport const setOverrides = (flags: FlagMap) =>\n ({\n type: SET_FEATURE_FLAG_OVERRIDES,\n payload: {\n flags,\n },\n } as const)\n","// Types\nimport {RemoteDataState, ScraperEntities} from 'src/types'\nimport {NormalizedSchema} from 'normalizr'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | ReturnType\n\nexport const SET_SCRAPERS = 'SET_SCRAPERS'\nexport const ADD_SCRAPER = 'ADD_SCRAPERS'\nexport const EDIT_SCRAPER = 'EDIT_SCRAPERS'\nexport const REMOVE_SCRAPER = 'REMOVE_SCRAPERS'\n\nexport const setScrapers = (\n status: RemoteDataState,\n schema?: NormalizedSchema\n) =>\n ({\n type: SET_SCRAPERS,\n status,\n schema,\n } as const)\n\nexport const addScraper = (schema: NormalizedSchema) =>\n ({\n type: ADD_SCRAPER,\n schema,\n } as const)\n\nexport const editScraper = (\n schema: NormalizedSchema\n) =>\n ({\n type: EDIT_SCRAPER,\n schema,\n } as const)\n\nexport const removeScraper = (id: string) =>\n ({\n type: REMOVE_SCRAPER,\n id,\n } as const)\n","// Actions\nimport {Action as NotifyAction} from 'src/shared/actions/notifications'\n\n// Types\nimport {NormalizedSchema} from 'normalizr'\nimport {MemberEntities, RemoteDataState} from 'src/types'\n\nexport type Action =\n | ReturnType\n | ReturnType\n | ReturnType\n | NotifyAction\n\nexport const SET_MEMBERS = 'SET_MEMBERS'\nexport const ADD_MEMBER = 'ADD_MEMBER'\nexport const REMOVE_MEMBER = 'REMOVE_MEMBER'\n\nexport const setMembers = (\n status: RemoteDataState,\n schema?: NormalizedSchema\n) =>\n ({\n type: SET_MEMBERS,\n status,\n schema,\n } as const)\n\nexport const addMember = (schema: NormalizedSchema) =>\n ({\n type: ADD_MEMBER,\n schema,\n } as const)\n\nexport const removeMember = (id: string) =>\n ({\n type: REMOVE_MEMBER,\n id,\n } as const)\n","export const RATE_LIMIT_ERROR_STATUS = 429\n\nexport const RATE_LIMIT_ERROR_TEXT =\n 'Oops. It looks like you have exceeded the query limits allowed as part of your plan. If you would like to increase your query limits, reach out to support@influxdata.com.'\n\nexport const ASSET_LIMIT_ERROR_STATUS = 403\n\nexport const ASSET_LIMIT_ERROR_TEXT =\n 'Oops. It looks like you have exceeded the asset limits allowed as part of your plan. If you would like to increase your limits, reach out to support@influxdata.com.'\n\nexport const REQUEST_TIMEOUT_STATUS = 408\nexport const GATEWAY_TIMEOUT_STATUS = 504\n","// Libraries\nimport {get} from 'lodash'\n\n// Utils\nimport {getActiveQuery} from 'src/timeMachine/selectors'\nimport {getRangeVariable} from 'src/variables/utils/getTimeRangeVars'\nimport {getTimeRange, getTimeRangeWithTimezone} from 'src/dashboards/selectors'\nimport {\n getVariableForZoomRequery,\n getWindowPeriodVariableFromVariables,\n} from 'src/variables/utils/getWindowVars'\nimport {\n TIME_RANGE_START,\n TIME_RANGE_STOP,\n WINDOW_PERIOD,\n} from 'src/variables/constants'\nimport {currentContext} from 'src/shared/selectors/currentContext'\n\n// Types\nimport {\n RemoteDataState,\n MapArguments,\n QueryArguments,\n CSVArguments,\n} from 'src/types'\nimport {VariableAssignment} from 'src/types/ast'\nimport {AppState, VariableArgumentType, Variable} from 'src/types'\n\n// Utils\nimport {filterUnusedVars} from 'src/shared/utils/filterUnusedVars'\n\nexport const extractVariableEditorName = (state: AppState): string => {\n return state.variableEditor.name\n}\n\nexport const extractVariableEditorType = (\n state: AppState\n): VariableArgumentType => {\n return state.variableEditor.selected\n}\n\nexport const extractVariableEditorQuery = (state: AppState): QueryArguments => {\n return (\n state.variableEditor.argsQuery || {\n type: 'query',\n values: {\n query: '',\n language: 'flux',\n },\n }\n )\n}\n\nexport const extractVariableEditorMap = (state: AppState): MapArguments => {\n return (\n state.variableEditor.argsMap || {\n type: 'map',\n values: {},\n }\n )\n}\n\nexport const extractVariableEditorConstant = (\n state: AppState\n): CSVArguments => {\n return (\n state.variableEditor.argsConstant || {\n type: 'constant',\n values: [],\n }\n )\n}\n\nexport const getUserVariableNames = (\n state: AppState,\n contextID: string\n): string[] => {\n const allIDs = get(state, ['resources', 'variables', 'allIDs'], [])\n const contextIDs = get(\n state,\n ['resources', 'variables', 'values', contextID, 'order'],\n []\n )\n\n return contextIDs\n .filter(v => allIDs.includes(v))\n .concat(allIDs.filter(v => !contextIDs.includes(v)))\n}\n\n// this function grabs all user defined variables\n// and hydrates them based on their context\nexport const getVariables = (\n state: AppState,\n contextID?: string\n): Variable[] => {\n const vars = getUserVariableNames(state, contextID || currentContext(state))\n .reduce((prev, curr) => {\n prev.push(getVariable(state, curr))\n\n return prev\n }, [])\n .filter(v => !!v)\n\n return vars\n}\n\nexport const getVariablesForDashboard = (state: AppState): Variable[] => {\n const variables = getVariables(state)\n\n const variablesUsedByDashboard = filterUnusedVars(\n variables,\n Object.values(state.resources.views.byID).filter(\n variable => variable.dashboardID === state.currentDashboard.id\n )\n ).sort((a, b) => {\n if (a.sort_order && b.sort_order) {\n return a.sort_order - b.sort_order\n }\n })\n\n return variablesUsedByDashboard\n}\n\n// the same as the above method, but includes system\n// variables\nexport const getAllVariables = (\n state: AppState,\n contextID?: string\n): Variable[] => {\n const vars = getUserVariableNames(state, contextID || currentContext(state))\n .concat([TIME_RANGE_START, TIME_RANGE_STOP, WINDOW_PERIOD])\n .reduce((prev, curr) => {\n prev.push(getVariable(state, curr))\n return prev\n }, [])\n .filter(v => !!v)\n return vars\n}\n\nexport const getAllVariablesForZoomRequery = (\n state: AppState,\n domain: number[],\n timeRangeType: string,\n contextID?: string\n): Variable[] => {\n const vars = getUserVariableNames(state, contextID || currentContext(state))\n .concat([TIME_RANGE_START, TIME_RANGE_STOP])\n .map(variableID => {\n if (domain?.length) {\n return getVariableForZoomRequery(variableID, domain, timeRangeType)\n }\n return getVariable(state, variableID)\n })\n .filter(v => !!v)\n\n return vars\n}\n\nexport const sortVariablesByName = (variables: Variable[]): Variable[] =>\n variables.sort((a, b) =>\n a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1\n )\n\nexport const getVariable = (state: AppState, variableID: string): Variable => {\n const contextID = currentContext(state)\n const ctx = state?.resources?.variables?.values?.[contextID]\n let vari = state?.resources?.variables?.byID?.[variableID]\n\n if (ctx && ctx.values && ctx.values.hasOwnProperty(variableID)) {\n vari = {...vari, ...ctx.values[variableID]}\n }\n\n if (variableID === TIME_RANGE_START || variableID === TIME_RANGE_STOP) {\n const timeRange = getTimeRangeWithTimezone(state)\n vari = getRangeVariable(variableID, timeRange)\n }\n\n if (variableID === WINDOW_PERIOD) {\n const {text} = getActiveQuery(state)\n const variables = getVariables(state)\n const range = getTimeRange(state)\n const timeVars = [\n getRangeVariable(TIME_RANGE_START, range),\n getRangeVariable(TIME_RANGE_STOP, range),\n ]\n\n vari = (getWindowPeriodVariableFromVariables(text, [\n ...timeVars,\n ...variables,\n ]) || [])[0]\n }\n\n if (!vari) {\n return vari\n }\n\n if (vari.arguments.type === 'query') {\n if (!ctx || !ctx.values || !ctx.values.hasOwnProperty(variableID)) {\n // TODO load that ish for the context\n // hydrateQueries(state, contextID, variableID)\n }\n }\n\n // Now validate that the selected value makes sense for\n // the current situation\n const vals = normalizeValues(vari)\n vari = {...vari}\n if (!vari.selected) {\n vari.selected = []\n }\n\n if (!vari.selected.length && vals.length) {\n if (Object.isExtensible(vari.selected)) {\n vari.selected.push(vals[0])\n }\n }\n\n return vari\n}\n\nexport const normalizeValues = (variable: Variable): string[] => {\n switch (variable.arguments.type) {\n case 'query':\n return variable.arguments.values.results || []\n case 'map':\n return Object.keys(variable.arguments.values) || []\n case 'constant':\n return variable.arguments.values || []\n default:\n return []\n }\n}\n\nexport const asAssignment = (variable: Variable): VariableAssignment => {\n const out = {\n type: 'VariableAssignment' as const,\n id: {\n type: 'Identifier' as const,\n name: variable.name,\n },\n } as VariableAssignment\n\n if (variable.id === WINDOW_PERIOD) {\n out.init = {\n type: 'DurationLiteral',\n values: [{magnitude: variable.arguments.values[0] || 10000, unit: 'ms'}],\n }\n\n return out\n }\n\n if (variable.id === TIME_RANGE_START || variable.id === TIME_RANGE_STOP) {\n const val = variable.arguments.values[0]\n\n if (!isNaN(Date.parse(val))) {\n out.init = {\n type: 'DateTimeLiteral',\n value: new Date(val).toISOString(),\n }\n } else if (val === 'now()') {\n out.init = {\n type: 'CallExpression',\n callee: {\n type: 'Identifier',\n name: 'now',\n },\n }\n } else if (val) {\n out.init = {\n type: 'UnaryExpression',\n operator: '-',\n argument: {\n type: 'DurationLiteral',\n values: val,\n },\n }\n }\n\n return out\n }\n\n if (variable.arguments.type === 'map') {\n if (!variable.selected) {\n variable.selected = [Object.keys(variable.arguments.values)[0]]\n }\n out.init = {\n type: 'StringLiteral',\n value: variable.arguments.values[variable.selected[0]],\n }\n }\n\n if (variable.arguments.type === 'constant') {\n if (!variable.selected) {\n variable.selected = [variable.arguments.values[0]]\n }\n out.init = {\n type: 'StringLiteral',\n value: variable.selected[0],\n }\n }\n\n if (variable.arguments.type === 'query') {\n if (!variable.selected || !variable.selected[0]) {\n out.init = {\n type: 'StringLiteral',\n value: '',\n }\n } else {\n out.init = {\n type: 'StringLiteral',\n value: variable.selected[0],\n }\n }\n }\n\n return out\n}\n\n// TODO kill this function\nexport const getTimeMachineValuesStatus = (\n state: AppState\n): RemoteDataState => {\n const activeTimeMachineID = state.timeMachines.activeTimeMachineID\n const valuesStatus = get(\n state,\n `resources.variables.values.${activeTimeMachineID}.status`\n )\n\n return valuesStatus\n}\n\n// TODO kill this function\nexport const getDashboardVariablesStatus = (\n state: AppState\n): RemoteDataState => {\n return get(state, 'resources.variables.status')\n}\n\nexport const getControlBarVisibility = (state: AppState): boolean => {\n return state.userSettings.showVariablesControls\n}\n","// This file is generated by [oats][0] and should not be edited by hand.\n//\n// [0]: https://github.com/influxdata/oats\n\nexport interface OAuthClientConfig {\n clientID: string\n domain: string\n redirectURL: string\n state: string\n}\n\nexport interface Error {\n readonly code:\n | 'internal error'\n | 'not found'\n | 'conflict'\n | 'invalid'\n | 'unprocessable entity'\n | 'empty value'\n | 'unavailable'\n | 'forbidden'\n | 'too many requests'\n | 'unauthorized'\n | 'method not allowed'\n | 'request too large'\n | 'unsupported media type'\n readonly message?: string\n readonly op?: string\n readonly err?: string\n}\n\nexport interface LimitEvents {\n links?: Links\n events?: LimitEvent[]\n}\n\nexport interface Links {\n next?: Link\n self: Link\n prev?: Link\n}\n\nexport type Link = string\n\nexport interface LimitEvent {\n orgID?: string\n type?:\n | 'limited_quota'\n | 'limited_write'\n | 'limited_query'\n | 'limited_cardinality'\n readonly timestamp?: string\n}\n\nexport interface Limit {\n orgID?: string\n rate: {\n queryTime: number\n readKBs: number\n concurrentReadRequests: number\n writeKBs: number\n concurrentWriteRequests: number\n cardinality: number\n concurrentDeleteRequests?: number\n deleteRequestsPerSecond?: number\n }\n bucket: {\n maxBuckets: number\n maxRetentionDuration: number\n }\n task: {\n maxTasks: number\n }\n dashboard: {\n maxDashboards: number\n }\n check: {\n maxChecks: number\n }\n notificationRule: {\n maxNotifications: number\n blockedNotificationRules?: string\n }\n notificationEndpoint: {\n blockedNotificationEndpoints?: string\n }\n features?: {\n allowDelete?: boolean\n }\n}\n\nexport type ServerError = any\n\nexport interface LimitStatuses {\n read: LimitStatus\n write: LimitStatus\n cardinality: LimitStatus\n}\n\nexport interface LimitStatus {\n status: 'ok' | 'exceeded'\n}\n\nexport interface OrgSettings {\n orgID?: string\n settings?: OrgSetting[]\n}\n\nexport interface OrgSetting {\n key?: string\n value?: string\n}\n\nexport interface OnboardingRequest {\n username: string\n password?: string\n org: string\n bucket: string\n retentionPeriodHrs?: number\n retentionPeriodSeconds?: number\n limit?: Limit\n}\n\nexport interface OnboardingResponse {\n user?: {\n readonly id?: string\n name: string\n status?: 'active' | 'inactive'\n readonly links?: {\n self?: string\n }\n }\n org?: {\n readonly links?: {\n self?: Link\n members?: Link\n owners?: Link\n labels?: Link\n secrets?: Link\n buckets?: Link\n tasks?: Link\n dashboards?: Link\n }\n readonly id?: string\n name: string\n description?: string\n readonly createdAt?: string\n readonly updatedAt?: string\n status?: 'active' | 'inactive'\n }\n bucket?: {\n readonly links?: {\n labels?: Link\n members?: Link\n org?: Link\n owners?: Link\n self?: Link\n write?: Link\n }\n readonly id?: string\n readonly type?: 'user' | 'system'\n name: string\n description?: string\n orgID?: string\n rp?: string\n schemaType?: 'implicit' | 'explicit'\n readonly createdAt?: string\n readonly updatedAt?: string\n retentionRules: Array<{\n type?: 'expire'\n everySeconds: number\n shardGroupDurationSeconds?: number\n }>\n labels?: Array<{\n readonly id?: string\n readonly orgID?: string\n name?: string\n properties?: any\n }>\n }\n auth?: {\n status?: 'active' | 'inactive'\n description?: string\n } & {\n readonly createdAt?: string\n readonly updatedAt?: string\n orgID?: string\n permissions?: Array<{\n action: 'read' | 'write'\n resource: {\n type:\n | 'authorizations'\n | 'buckets'\n | 'dashboards'\n | 'orgs'\n | 'tasks'\n | 'telegrafs'\n | 'users'\n | 'variables'\n | 'secrets'\n | 'labels'\n | 'views'\n | 'documents'\n | 'notificationRules'\n | 'notificationEndpoints'\n | 'checks'\n | 'dbrp'\n | 'flows'\n | 'annotations'\n | 'functions'\n id?: string\n name?: string\n orgID?: string\n org?: string\n }\n }>\n readonly id?: string\n readonly token?: string\n readonly userID?: string\n readonly user?: string\n readonly org?: string\n readonly links?: {\n readonly self?: Link\n readonly user?: Link\n }\n }\n}\n\nexport interface ProvisionRequest {\n user: Identity\n org: Identity\n config: {\n bucket?: string\n retentionPeriodSeconds?: number\n limit?: Limit\n }\n returnToken?: boolean\n}\n\nexport interface Identity {\n id?: string\n name?: string\n}\n\nexport interface ProvisionResponse {\n user?: Identity\n org?: IdentityWithLinks\n token?: string\n}\n\nexport interface IdentityWithLinks {\n id?: string\n name?: string\n links?: Links\n}\n\nexport interface ProvisionDeleteRequest {\n orgID: string\n}\n\nexport interface ProvisionUserRequest {\n user: Identity\n orgID: string\n role: 'owner' | 'member'\n}\n\nexport interface ProvisionUserResponse {\n user?: Identity\n org?: Identity\n}\n\nexport interface ProvisionUserDeleteRequest {\n userID: string\n orgID: string\n newOwnerID?: string\n tokenOption?: 'transfer' | 'delete'\n taskOption?: 'transfer' | 'delete'\n}\n\nexport interface ProvisionSetupRequest {\n user: Identity\n org: Identity\n}\n\nexport interface ProvisionSuspendRequest {\n orgID: string\n}\n\ninterface RequestOptions {\n signal?: AbortSignal\n}\n\nexport type RequestHandler = (\n url: string,\n query: string,\n init: RequestInit\n) => {url: string; query: string; init: RequestInit}\nexport type ResponseHandler = (\n status: number,\n headers: Headers,\n data: any\n) => {status: number; headers: Headers; data: any}\n\nconst RequestContext = function (\n requestHandler: RequestHandler,\n responseHandler: ResponseHandler\n) {\n this.requestHandler = requestHandler\n this.responseHandler = responseHandler\n}\n\nRequestContext.prototype.request = async function (\n method: string,\n url: string,\n params: any = {},\n options: RequestOptions = {}\n): Promise {\n const requestHeaders = new Headers(params.headers)\n const contentType = requestHeaders.get('Content-Type') || ''\n\n if (params.auth) {\n const credentials = btoa(`${params.auth.username}:${params.auth.password}`)\n\n requestHeaders.append('Authorization', `Basic ${credentials}`)\n }\n\n const body =\n params.data && contentType.includes('json')\n ? JSON.stringify(params.data)\n : params.data\n\n const query = params.query ? `?${new URLSearchParams(params.query)}` : ''\n\n const {\n url: middlewareUrl,\n query: middlewareQuery,\n init,\n } = this.requestHandler(url, query, {\n method,\n body,\n credentials: 'same-origin',\n signal: options.signal,\n headers: requestHeaders,\n })\n\n const response = await fetch(`${middlewareUrl}${middlewareQuery}`, init)\n\n const {status, headers} = response\n const responseContentType = headers.get('Content-Type') || ''\n\n let data\n\n if (responseContentType.includes('json')) {\n data = await response.json()\n } else if (responseContentType.includes('octet-stream')) {\n data = await response.blob()\n } else {\n data = await response.text()\n }\n\n return this.responseHandler(status, headers, data)\n}\n\nRequestContext.prototype.setRequestHandler = function (\n requestHandler: RequestHandler\n) {\n this.requestHandler = requestHandler\n}\n\nRequestContext.prototype.setResponseHandler = function (\n responseHandler: ResponseHandler\n) {\n this.responseHandler = responseHandler\n}\n\nconst rc = new RequestContext(\n (url, query, init) => {\n return {url, query, init}\n },\n (status, headers, data) => {\n return {status, headers, data}\n }\n)\nconst request = rc.request.bind(rc)\nconst setRequestHandler = rc.setRequestHandler.bind(rc)\nconst setResponseHandler = rc.setResponseHandler.bind(rc)\n\nexport {request, setRequestHandler, setResponseHandler}\n\nexport interface GetOauthClientConfigParams {\n query?: {\n redirectTo?: string\n }\n}\n\ntype GetOauthClientConfigResult =\n | GetOauthClientConfigOKResult\n | GetOauthClientConfigDefaultResult\n\ninterface GetOauthClientConfigOKResult {\n status: 200\n headers: Headers\n data: OAuthClientConfig\n}\n\ninterface GetOauthClientConfigDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOauthClientConfig = (\n params: GetOauthClientConfigParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/oauth/clientConfig',\n params,\n options\n ) as Promise\n\nexport interface GetFlagsParams {}\n\ntype GetFlagsResult = GetFlagsOKResult | GetFlagsDefaultResult\n\ninterface GetFlagsOKResult {\n status: 200\n headers: Headers\n data: any\n}\n\ninterface GetFlagsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getFlags = (\n params: GetFlagsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/flags',\n params,\n options\n ) as Promise\n\nexport interface GetLimiteventsParams {\n query: {\n orgID: string\n start?: string\n stop?: string\n limit?: number\n offset?: number\n }\n}\n\ntype GetLimiteventsResult = GetLimiteventsOKResult | GetLimiteventsDefaultResult\n\ninterface GetLimiteventsOKResult {\n status: 200\n headers: Headers\n data: LimitEvents\n}\n\ninterface GetLimiteventsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getLimitevents = (\n params: GetLimiteventsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n '/api/v2private/limitevents',\n params,\n options\n ) as Promise\n\nexport interface GetOrgsLimitsParams {\n orgID: string\n}\n\ntype GetOrgsLimitsResult = GetOrgsLimitsOKResult | GetOrgsLimitsDefaultResult\n\ninterface GetOrgsLimitsOKResult {\n status: 200\n headers: Headers\n data: Limit\n}\n\ninterface GetOrgsLimitsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsLimits = (\n params: GetOrgsLimitsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/orgs/${params.orgID}/limits`,\n params,\n options\n ) as Promise\n\nexport interface PutOrgsLimitsParams {\n orgID: string\n\n data: Limit\n}\n\ntype PutOrgsLimitsResult = PutOrgsLimitsOKResult | PutOrgsLimitsDefaultResult\n\ninterface PutOrgsLimitsOKResult {\n status: 200\n headers: Headers\n data: Limit\n}\n\ninterface PutOrgsLimitsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putOrgsLimits = (\n params: PutOrgsLimitsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/orgs/${params.orgID}/limits`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PatchOrgsLimitsParams {\n orgID: string\n\n data: {\n orgID?: string\n rate?: {\n queryTime?: number\n readKBs?: number\n concurrentReadRequests?: number\n writeKBs?: number\n concurrentWriteRequests?: number\n cardinality?: number\n concurrentDeleteRequests?: number\n deleteRequestsPerSecond?: number\n }\n bucket?: {\n maxBuckets?: number\n maxRetentionDuration?: number\n }\n task?: {\n maxTasks: number\n }\n dashboard?: {\n maxDashboards: number\n }\n check?: {\n maxChecks: number\n }\n notificationRule?: {\n maxNotifications?: number\n blockedNotificationRules?: string\n }\n notificationEndpoint?: {\n blockedNotificationEndpoints?: string\n }\n }\n}\n\ntype PatchOrgsLimitsResult =\n | PatchOrgsLimitsOKResult\n | PatchOrgsLimitsUnprocessableEntityResult\n | PatchOrgsLimitsDefaultResult\n\ninterface PatchOrgsLimitsOKResult {\n status: 200\n headers: Headers\n data: Limit\n}\n\ninterface PatchOrgsLimitsUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: ServerError\n}\n\ninterface PatchOrgsLimitsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const patchOrgsLimits = (\n params: PatchOrgsLimitsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PATCH',\n `/api/v2private/orgs/${params.orgID}/limits`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface GetOrgsLimitsStatusParams {\n orgID: string\n}\n\ntype GetOrgsLimitsStatusResult =\n | GetOrgsLimitsStatusOKResult\n | GetOrgsLimitsStatusDefaultResult\n\ninterface GetOrgsLimitsStatusOKResult {\n status: 200\n headers: Headers\n data: LimitStatuses\n}\n\ninterface GetOrgsLimitsStatusDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsLimitsStatus = (\n params: GetOrgsLimitsStatusParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/orgs/${params.orgID}/limits/status`,\n params,\n options\n ) as Promise\n\nexport interface GetOrgsSettingsParams {\n orgID: string\n}\n\ntype GetOrgsSettingsResult =\n | GetOrgsSettingsOKResult\n | GetOrgsSettingsDefaultResult\n\ninterface GetOrgsSettingsOKResult {\n status: 200\n headers: Headers\n data: OrgSettings\n}\n\ninterface GetOrgsSettingsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const getOrgsSettings = (\n params: GetOrgsSettingsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'GET',\n `/api/v2private/orgs/${params.orgID}/settings`,\n params,\n options\n ) as Promise\n\nexport interface PutOrgsSettingsParams {\n orgID: string\n\n data: OrgSettings\n}\n\ntype PutOrgsSettingsResult =\n | PutOrgsSettingsOKResult\n | PutOrgsSettingsDefaultResult\n\ninterface PutOrgsSettingsOKResult {\n status: 200\n headers: Headers\n data: OrgSettings\n}\n\ninterface PutOrgsSettingsDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putOrgsSettings = (\n params: PutOrgsSettingsParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n `/api/v2private/orgs/${params.orgID}/settings`,\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostSetupUserParams {\n data: OnboardingRequest\n}\n\ntype PostSetupUserResult =\n | PostSetupUserCreatedResult\n | PostSetupUserDefaultResult\n\ninterface PostSetupUserCreatedResult {\n status: 201\n headers: Headers\n data: OnboardingResponse\n}\n\ninterface PostSetupUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postSetupUser = (\n params: PostSetupUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/setup/user',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PutProvisionParams {\n data: ProvisionRequest\n}\n\ntype PutProvisionResult =\n | PutProvisionCreatedResult\n | PutProvisionBadRequestResult\n | PutProvisionUnauthorizedResult\n | PutProvisionForbiddenResult\n | PutProvisionUnprocessableEntityResult\n | PutProvisionNotImplementedResult\n | PutProvisionDefaultResult\n\ninterface PutProvisionCreatedResult {\n status: 201\n headers: Headers\n data: ProvisionResponse\n}\n\ninterface PutProvisionBadRequestResult {\n status: 400\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUnauthorizedResult {\n status: 401\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionForbiddenResult {\n status: 403\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionNotImplementedResult {\n status: 501\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putProvision = (\n params: PutProvisionParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n '/api/v2private/provision',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostProvisionDeleteParams {\n data: ProvisionDeleteRequest\n}\n\ntype PostProvisionDeleteResult =\n | PostProvisionDeleteNoContentResult\n | PostProvisionDeleteBadRequestResult\n | PostProvisionDeleteUnauthorizedResult\n | PostProvisionDeleteUnprocessableEntityResult\n | PostProvisionDeleteDefaultResult\n\ninterface PostProvisionDeleteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostProvisionDeleteBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionDeleteUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionDeleteUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionDeleteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postProvisionDelete = (\n params: PostProvisionDeleteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/provision/delete',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PutProvisionUserParams {\n data: ProvisionUserRequest\n\n headers?: {\n 'Zap-Trace-Span'?: string\n }\n}\n\ntype PutProvisionUserResult =\n | PutProvisionUserCreatedResult\n | PutProvisionUserBadRequestResult\n | PutProvisionUserUnauthorizedResult\n | PutProvisionUserUnprocessableEntityResult\n | PutProvisionUserNotImplementedResult\n | PutProvisionUserDefaultResult\n\ninterface PutProvisionUserCreatedResult {\n status: 201\n headers: Headers\n data: ProvisionUserResponse\n}\n\ninterface PutProvisionUserBadRequestResult {\n status: 400\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUserUnauthorizedResult {\n status: 401\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUserUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUserNotImplementedResult {\n status: 501\n headers: Headers\n data: ServerError\n}\n\ninterface PutProvisionUserDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const putProvisionUser = (\n params: PutProvisionUserParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'PUT',\n '/api/v2private/provision/user',\n {\n ...params,\n headers: {...params.headers, 'Content-Type': 'application/json'},\n },\n options\n ) as Promise\n\nexport interface PostProvisionUserDeleteParams {\n data: ProvisionUserDeleteRequest\n}\n\ntype PostProvisionUserDeleteResult =\n | PostProvisionUserDeleteNoContentResult\n | PostProvisionUserDeleteBadRequestResult\n | PostProvisionUserDeleteUnauthorizedResult\n | PostProvisionUserDeleteUnprocessableEntityResult\n | PostProvisionUserDeleteDefaultResult\n\ninterface PostProvisionUserDeleteNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostProvisionUserDeleteBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUserDeleteUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUserDeleteUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUserDeleteDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postProvisionUserDelete = (\n params: PostProvisionUserDeleteParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/provision/user/delete',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostProvisionSetupParams {\n data: ProvisionSetupRequest\n}\n\ntype PostProvisionSetupResult =\n | PostProvisionSetupCreatedResult\n | PostProvisionSetupBadRequestResult\n | PostProvisionSetupUnprocessableEntityResult\n | PostProvisionSetupDefaultResult\n\ninterface PostProvisionSetupCreatedResult {\n status: 201\n headers: Headers\n data: {\n token?: string\n }\n}\n\ninterface PostProvisionSetupBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionSetupUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionSetupDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postProvisionSetup = (\n params: PostProvisionSetupParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/provision/setup',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostProvisionSuspendParams {\n data: ProvisionSuspendRequest\n}\n\ntype PostProvisionSuspendResult =\n | PostProvisionSuspendNoContentResult\n | PostProvisionSuspendBadRequestResult\n | PostProvisionSuspendUnauthorizedResult\n | PostProvisionSuspendUnprocessableEntityResult\n | PostProvisionSuspendDefaultResult\n\ninterface PostProvisionSuspendNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostProvisionSuspendBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionSuspendUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionSuspendUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionSuspendDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postProvisionSuspend = (\n params: PostProvisionSuspendParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/provision/suspend',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n\nexport interface PostProvisionUnsuspendParams {\n data: ProvisionSuspendRequest\n}\n\ntype PostProvisionUnsuspendResult =\n | PostProvisionUnsuspendNoContentResult\n | PostProvisionUnsuspendBadRequestResult\n | PostProvisionUnsuspendUnauthorizedResult\n | PostProvisionUnsuspendUnprocessableEntityResult\n | PostProvisionUnsuspendDefaultResult\n\ninterface PostProvisionUnsuspendNoContentResult {\n status: 204\n headers: Headers\n data: any\n}\n\ninterface PostProvisionUnsuspendBadRequestResult {\n status: 400\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUnsuspendUnauthorizedResult {\n status: 401\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUnsuspendUnprocessableEntityResult {\n status: 422\n headers: Headers\n data: Error\n}\n\ninterface PostProvisionUnsuspendDefaultResult {\n status: 500\n headers: Headers\n data: Error\n}\n\nexport const postProvisionUnsuspend = (\n params: PostProvisionUnsuspendParams,\n options: RequestOptions = {}\n): Promise =>\n request(\n 'POST',\n '/api/v2private/provision/unsuspend',\n {...params, headers: {'Content-Type': 'application/json'}},\n options\n ) as Promise\n","import {lazy} from 'react'\n\nexport const DataExplorerPage = lazy(\n () => import('src/dataExplorer/components/DataExplorerPage')\n)\n\nexport const TasksPage = lazy(() => import('src/tasks/containers/TasksPage'))\nexport const TaskPage = lazy(() => import('src/tasks/containers/TaskPage'))\nexport const TaskRunsPage = lazy(\n () => import('src/tasks/components/TaskRunsPage')\n)\nexport const TaskEditPage = lazy(\n () => import('src/tasks/containers/TaskEditPage')\n)\nexport const TaskImportOverlay = lazy(\n () => import('src/tasks/components/TaskImportOverlay')\n)\nexport const DashboardsIndex = lazy(\n () => import('src/dashboards/components/dashboard_index/DashboardsIndex')\n)\nexport const DashboardContainer = lazy(\n () => import('src/dashboards/components/DashboardContainer')\n)\nexport const FlowPage = lazy(() => import('src/flows/components/FlowPage'))\nexport const VersionPage = lazy(\n () => import('src/flows/components/VersionPage')\n)\nexport const BucketsIndex = lazy(\n () => import('src/buckets/containers/BucketsIndex')\n)\nexport const TokensIndex = lazy(\n () => import('src/authorizations/containers/TokensIndex')\n)\nexport const TelegrafsPage = lazy(\n () => import('src/telegrafs/containers/TelegrafsPage')\n)\nexport const ScrapersIndex = lazy(\n () => import('src/scrapers/containers/ScrapersIndex')\n)\nexport const WriteDataPage = lazy(\n () => import('src/writeData/containers/WriteDataPage')\n)\nexport const FileUploadsPage = lazy(\n () => import('src/writeData/containers/FileUploadsPage')\n)\nexport const ClientLibrariesPage = lazy(\n () => import('src/writeData/containers/ClientLibrariesPage')\n)\nexport const TelegrafPluginsPage = lazy(\n () => import('src/writeData/containers/TelegrafPluginsPage')\n)\nexport const SecretsIndex = lazy(\n () => import('src/secrets/containers/SecretsIndex')\n)\nexport const VariablesIndex = lazy(\n () => import('src/variables/containers/VariablesIndex')\n)\nexport const LabelsIndex = lazy(\n () => import('src/labels/containers/LabelsIndex')\n)\nexport const OrgProfilePage = lazy(\n () => import('src/organizations/containers/OrgProfilePage')\n)\nexport const AlertingIndex = lazy(\n () => import('src/alerting/components/AlertingIndex')\n)\nexport const AlertHistoryIndex = lazy(\n () => import('src/alerting/components/AlertHistoryIndex')\n)\nexport const CheckHistory = lazy(\n () => import('src/checks/components/CheckHistory')\n)\nexport const MembersIndex = lazy(\n () => import('src/members/containers/MembersIndex')\n)\nexport const RouteToDashboardList = lazy(\n () => import('src/dashboards/components/RouteToDashboardList')\n)\nexport const FlowsIndex = lazy(() => import('src/flows/components/FlowsIndex'))\nexport const NotFound = lazy(() => import('src/shared/components/NotFound'))\nexport const UsersPage = lazy(() => import('src/users/components/Users'))\nexport const UsagePage = lazy(() => import('src/usage/UsagePage'))\nexport const BillingPage = lazy(\n () => import('src/billing/components/BillingPage')\n)\nexport const OperatorPage = lazy(() => import('src/operator/OperatorPage'))\nexport const AccountPage = lazy(\n () => import('src/operator/account/AccountPage')\n)\nexport const UserAccountPage = lazy(() => import('src/accounts/AccountPage'))\nexport const OrgOverlay = lazy(() => import('src/operator/OrgOverlayWrapper'))\n\nexport const CheckoutPage = lazy(() => import('src/checkout/CheckoutPage'))\n\nexport const SubscriptionsLanding = lazy(\n () => import('src/writeData/subscriptions/components/SubscriptionsLanding')\n)\nexport const CreateSubscriptionForm = lazy(\n () => import('src/writeData/subscriptions/components/CreateSubscriptionPage')\n)\n\nexport const HomepageContainer = lazy(() =>\n import('src/homepageExperience/containers/HomepageContainer').then(\n module => ({default: module.HomepageContainer})\n )\n)\n\nexport const ArduinoWizard = lazy(() =>\n import('src/homepageExperience/containers/ArduinoWizard').then(module => ({\n default: module.ArduinoWizard,\n }))\n)\n\nexport const PythonWizard = lazy(() =>\n import('src/homepageExperience/containers/PythonWizard').then(module => ({\n default: module.PythonWizard,\n }))\n)\n\nexport const NodejsWizard = lazy(() =>\n import('src/homepageExperience/containers/NodejsWizard').then(module => ({\n default: module.NodejsWizard,\n }))\n)\n\nexport const GoWizard = lazy(() =>\n import('src/homepageExperience/containers/GoWizard').then(module => ({\n default: module.GoWizard,\n }))\n)\n\nexport const CliWizard = lazy(() =>\n import('src/homepageExperience/containers/CliWizard').then(module => ({\n default: module.CliWizard,\n }))\n)\n\nexport const DetailsSubscriptionPage = lazy(\n () => import('src/writeData/subscriptions/components/DetailsSubscriptionPage')\n)\n","// Utils\nimport {parse} from 'src/languageSupport/languages/flux/parser'\nimport {findNodes} from 'src/shared/utils/ast'\n\n// Types\nimport {File, MemberExpression} from 'src/types'\n\nexport interface ASTIM {\n variables: MemberExpression[]\n getAST: () => File\n hasVariable: (v: string) => boolean\n}\n\nconst parseAllVariables = (ast: File): MemberExpression[] => {\n return findNodes(\n ast,\n node => node?.property?.type === 'Identifier' && node?.object?.name === 'v'\n )\n}\n\nexport const parseASTIM = (query: string): ASTIM => {\n let ast: File = null\n try {\n ast = parse(query)\n } catch (e) {\n console.error(e)\n }\n const variables: MemberExpression[] = ast ? parseAllVariables(ast) : []\n const variableNames = new Set()\n variables.forEach(variable => {\n if (variable.property.type === 'Identifier') {\n variableNames.add(variable.property.name)\n } else if (variable.property.type === 'StringLiteral') {\n variableNames.add(variable.property.value)\n }\n })\n\n const hasVariable = (v: string): boolean => {\n return variableNames.has(v)\n }\n\n const getAST = (): File => {\n return ast\n }\n\n return {\n getAST,\n variables,\n hasVariable,\n }\n}\n","import {AppState} from 'src/types'\n\n// NOTE: this selector is dependant on the timemachine\n// and currentDashboard stores being defined\nexport const currentContext = (state: AppState): string => {\n if (state.currentDashboard.id) {\n return state.currentDashboard.id\n }\n\n return ''\n}\n","export enum ThresholdFormat {\n Value = 'value',\n Range = 'range',\n Deadman = 'deadman',\n}\n\nexport type Threshold = {\n value: number\n type: string\n field: string\n max?: number\n min?: number\n deadmanCheckValue?: string\n deadmanStopValue: string\n}\n\nexport interface ErrorThreshold extends Threshold {\n fieldType: string\n}\n\nexport const EQUALITY_THRESHOLD_TYPES = {\n equal: {\n name: 'equal to',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] == ${data.value}`,\n },\n 'not-equal': {\n name: 'not equal to',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] != ${data.value}`,\n },\n}\n\nexport const COMMON_THRESHOLD_TYPES = {\n ...EQUALITY_THRESHOLD_TYPES,\n greater: {\n name: 'greater than',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] > ${data.value}`,\n },\n 'greater-equal': {\n name: 'greater than or equal to',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] >= ${data.value}`,\n },\n less: {\n name: 'less than',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] < ${data.value}`,\n },\n 'less-equal': {\n name: 'less than or equal to',\n format: ThresholdFormat.Value,\n condition: data => ` r[\"${data.field}\"] <= ${data.value}`,\n },\n between: {\n name: 'between',\n format: ThresholdFormat.Range,\n condition: data =>\n ` (r[\"${data.field}\"] > ${data.min} and r[\"${data.field}\"] < ${data.max})`,\n },\n 'not-between': {\n name: 'not between',\n format: ThresholdFormat.Range,\n condition: data =>\n ` (r[\"${data.field}\"] < ${data.min} or r[\"${data.field}\"] > ${data.max})`,\n },\n}\n\nexport const deadmanType = 'missing-for-longer-than'\n\nexport const THRESHOLD_TYPES = {\n ...COMMON_THRESHOLD_TYPES,\n [deadmanType]: {\n name: 'missing for longer than',\n format: ThresholdFormat.Deadman,\n condition: _ => ` r[\"dead\"]`,\n },\n}\n","// Libraries\nimport React, {FC, useState} from 'react'\nimport {useDispatch, useSelector} from 'react-redux'\n\n// Components\nimport {\n Alert,\n Button,\n ComponentColor,\n ComponentStatus,\n Form,\n IconFont,\n Input,\n Overlay,\n RemoteDataState,\n} from '@influxdata/clockface'\nimport {Secret} from 'src/types'\n\n// Utils\nimport {getAllSecrets} from 'src/resources/selectors'\nimport {upsertSecret} from 'src/secrets/actions/thunks'\nimport {event} from 'src/cloud/utils/reporting'\n\ntype OwnProps = {\n onDismiss?: () => void\n onSubmit?: (id?: string) => void\n}\nconst CreateSecretForm: FC = ({onDismiss, onSubmit}) => {\n const secrets = useSelector(getAllSecrets)\n const handleKeyValidation = (key: string): string | null => {\n if (!key) {\n return null\n }\n\n if (key.trim() === '') {\n return 'Key is required'\n }\n const existingIds = secrets.map(s => s.id)\n\n if (existingIds.includes(key)) {\n return 'Key is already in use'\n }\n\n return null\n }\n\n const [newSecret, setNewSecret] = useState({\n id: '',\n value: '',\n status: RemoteDataState.NotStarted,\n })\n const dispatch = useDispatch()\n\n const isFormValid = (): boolean => {\n return (\n newSecret?.id?.length > 0 &&\n newSecret?.value?.length > 0 &&\n handleKeyValidation(newSecret?.id) === null\n )\n }\n\n const handleChangeInput = ({target}) => {\n const {name, value} = target\n\n setNewSecret(prevState => ({...prevState, [name]: value}))\n }\n\n const handleDismiss = () => {\n if (onDismiss) {\n onDismiss()\n }\n }\n\n const handleSubmit = () => {\n try {\n event('New Secret Created')\n dispatch(upsertSecret(newSecret))\n if (onSubmit) {\n onSubmit(newSecret.id)\n }\n } finally {\n handleDismiss()\n }\n }\n\n const warningText =\n 'Make sure you know your secret value! You will be able to reference the secret in queries by key but you will not be able to see the value again.'\n\n return (\n <>\n \n \n {warningText}\n \n\n \n {status => (\n \n )}\n \n\n \n\n \n \n \n \n \n \n \n )\n}\n\nexport default CreateSecretForm\n","import React, {FC, useContext, useEffect, useState} from 'react'\nimport {Variable} from 'src/types'\nimport {FlowQueryContext} from 'src/flows/context/flow.query'\nimport {FlowContext} from 'src/flows/context/flow.current'\nimport {PipeContext} from 'src/flows/context/pipe'\nimport {getRangeVariable} from 'src/variables/utils/getTimeRangeVars'\nimport {TIME_RANGE_START, TIME_RANGE_STOP} from 'src/variables/constants'\nimport {getWindowPeriodVariableFromVariables} from 'src/variables/utils/getWindowVars'\n\nconst EMPTY_STATE = [] as Variable[]\n\ninterface VariablesContextType {\n variables: Variable[]\n}\n\nconst DEFAULT_CONTEXT: VariablesContextType = {\n variables: [],\n}\n\nexport const VariablesContext =\n React.createContext(DEFAULT_CONTEXT)\n\nexport const VariablesProvider: FC = ({children}) => {\n const {id, range: pipeRange} = useContext(PipeContext)\n const {flow} = useContext(FlowContext)\n const {getPanelQueries} = useContext(FlowQueryContext)\n const {source} = getPanelQueries(id)\n const [variables, setVariables] = useState(EMPTY_STATE)\n\n useEffect(() => {\n if ((!pipeRange && !flow?.range) || !source) {\n return\n }\n const range = pipeRange || flow?.range\n const timeVars = [\n getRangeVariable(TIME_RANGE_START, range),\n getRangeVariable(TIME_RANGE_STOP, range),\n ]\n const windowVar = getWindowPeriodVariableFromVariables(source, timeVars)\n setVariables(!!windowVar ? timeVars.concat(windowVar) : timeVars)\n }, [id, source, pipeRange, flow?.range])\n\n return (\n \n {children}\n \n )\n}\n","import {sortBy} from 'lodash'\nimport chroma from 'chroma-js'\n\nimport {\n THRESHOLD_COLORS,\n BASE_THRESHOLD_ID,\n THRESHOLD_TYPE_TEXT,\n} from 'src/shared/constants/thresholds'\n\nimport {Color} from 'src/types/colors'\n\nconst getLegibleTextColor = bgColorHex => {\n const darkText = '#292933'\n const lightText = '#ffffff'\n\n const [red, green, blue] = chroma(bgColorHex).rgb()\n const average = (red + green + blue) / 3\n const mediumGrey = 128\n\n return average > mediumGrey ? darkText : lightText\n}\n\nconst findNearestCrossedThreshold = (colors, lastValue) => {\n const sortedColors = sortBy(colors, color => Number(color.value))\n\n // If the value is less than zero, clamp to the lowest value\n // See https://github.com/influxdata/influxdb/issues/20750\n if (lastValue < 0) {\n return sortedColors[0]\n }\n\n const nearestCrossedThreshold = sortedColors\n .filter(color => lastValue >= color.value)\n .pop()\n\n return nearestCrossedThreshold\n}\n\nexport const generateThresholdsListHexs = ({\n colors,\n lastValue,\n cellType = 'line',\n}: {\n colors: Color[]\n lastValue: string | number | null\n cellType: string\n}) => {\n const defaultColoring = {\n bgColor: null,\n textColor: cellType === 'table' ? '#BEC2CC' : THRESHOLD_COLORS[11].hex,\n }\n\n const lastValueNumber = Number(lastValue) || 0\n\n if (!colors || !colors.length) {\n return defaultColoring\n }\n\n // baseColor is expected in all cases\n const baseColor = colors.find(color => color.id === BASE_THRESHOLD_ID) || {\n hex: defaultColoring.textColor,\n }\n\n if (!lastValue && lastValue !== 0) {\n return {...defaultColoring, textColor: baseColor.hex}\n }\n\n // If the single stat is above a line graph never have a background color\n if (cellType === 'line-plus-single-stat') {\n return baseColor\n ? {bgColor: null, textColor: baseColor.hex}\n : defaultColoring\n }\n\n // When there is only a base color and it's applied to the text\n const shouldColorizeText = !!colors.find(\n color => color.type === THRESHOLD_TYPE_TEXT\n )\n\n if (shouldColorizeText && colors.length === 1 && baseColor) {\n return {bgColor: null, textColor: baseColor.hex}\n }\n\n if (shouldColorizeText && colors.length === 1) {\n return defaultColoring\n }\n\n // When there's multiple colors and they're applied to the text\n if (shouldColorizeText && colors.length > 1) {\n const nearestCrossedThreshold = findNearestCrossedThreshold(\n colors,\n lastValueNumber\n )\n\n return {bgColor: null, textColor: nearestCrossedThreshold.hex}\n }\n\n // When there is only a base color and it's applued to the background\n if (colors.length === 1) {\n return {\n bgColor: baseColor.hex,\n textColor: getLegibleTextColor(baseColor.hex),\n }\n }\n\n // When there are multiple colors and they're applied to the background\n if (colors.length > 1) {\n const nearestCrossedThreshold = findNearestCrossedThreshold(\n colors,\n lastValueNumber\n )\n\n const bgColor = nearestCrossedThreshold\n ? nearestCrossedThreshold.hex\n : baseColor.hex\n\n return {bgColor, textColor: getLegibleTextColor(bgColor)}\n }\n\n return {bgColor: null, textColor: baseColor.hex}\n}\n","export const humanizeNote = (text: string): string => {\n return text.replace(/>/g, '>').replace(/'/g, \"'\")\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport classnames from 'classnames'\n\ninterface Props {\n title: string\n testID: string\n onDelete?: () => void\n onDragStart?: () => void\n className?: string\n}\n\nexport default class BuilderCardHeader extends PureComponent {\n public static defaultProps = {\n testID: 'builder-card--header',\n }\n\n public render() {\n const {testID, children, className} = this.props\n\n const classname = classnames('builder-card--header', {\n [`${className}`]: className,\n })\n\n return (\n
\n {this.title}\n {children}\n {this.deleteButton}\n
\n )\n }\n\n private get title(): JSX.Element {\n const {onDragStart, title} = this.props\n\n if (onDragStart) {\n return (\n
\n
\n

{title}

\n
\n )\n }\n\n return

{title}

\n }\n\n private get deleteButton(): JSX.Element | undefined {\n const {onDelete} = this.props\n\n if (onDelete) {\n return
\n }\n }\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\n\nimport {ComponentStatus, Dropdown, SelectDropdown} from '@influxdata/clockface'\nimport {BuilderAggregateFunctionType} from 'src/types'\n\ninterface Props {\n options: string[]\n selectedOption: string\n testID: string\n onSelect?: (option: BuilderAggregateFunctionType) => void\n onDelete?: () => void\n isInCheckOverlay?: boolean\n}\n\nconst emptyFunction = () => {}\n\nexport default class BuilderCardDropdownHeader extends PureComponent {\n public static defaultProps = {\n testID: 'builder-card--header',\n }\n\n public render() {\n const {\n children,\n isInCheckOverlay,\n options,\n onSelect,\n selectedOption,\n testID,\n } = this.props\n const button = () => (\n {}}>\n {selectedOption}\n \n )\n\n const menu = () => null\n return (\n
\n {isInCheckOverlay ? (\n \n ) : (\n \n )}\n {children}\n {this.deleteButton}\n
\n )\n }\n\n private get deleteButton(): JSX.Element | undefined {\n const {onDelete} = this.props\n\n if (onDelete) {\n return
\n }\n }\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport classnames from 'classnames'\n\ninterface Props {\n testID: string\n className?: string\n}\n\nexport default class BuilderCardMenu extends PureComponent {\n public static defaultProps = {\n testID: 'builder-card--menu',\n }\n\n public render() {\n const {testID, children, className} = this.props\n const classname = classnames('builder-card--menu', {\n [`${className}`]: className,\n })\n\n return (\n
\n {children}\n
\n )\n }\n}\n","// Libraries\nimport React, {PureComponent, ReactNode, CSSProperties} from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport {DapperScrollbars} from '@influxdata/clockface'\n\ninterface Props {\n scrollable: boolean\n addPadding: boolean\n testID: string\n autoHideScrollbars: boolean\n style?: CSSProperties\n className?: string\n}\n\nexport default class BuilderCardBody extends PureComponent {\n public static defaultProps = {\n scrollable: true,\n addPadding: true,\n testID: 'builder-card--body',\n autoHideScrollbars: false,\n }\n\n public render() {\n const {scrollable, testID, autoHideScrollbars, style, className} =\n this.props\n\n if (scrollable) {\n const scrollbarStyles = {maxWidth: '100%', maxHeight: '100%', ...style}\n\n return (\n \n {this.children}\n \n )\n }\n\n const classname = classnames('builder-card--body', {\n [`${className}`]: className,\n })\n\n return (\n
\n {this.children}\n
\n )\n }\n\n private get children(): JSX.Element | ReactNode {\n const {addPadding, children} = this.props\n\n if (addPadding) {\n return
{children}
\n }\n\n return children\n }\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\n\ninterface Props {\n testID: string\n}\n\nexport default class BuilderCardEmpty extends PureComponent {\n public static defaultProps = {\n testID: 'builder-card--empty',\n }\n\n public render() {\n const {testID, children} = this.props\n\n return (\n \n {children}\n
\n )\n }\n}\n","// Libraries\nimport React, {PureComponent} from 'react'\nimport classnames from 'classnames'\n\n// Components\nimport BuilderCardHeader from 'src/timeMachine/components/builderCard/BuilderCardHeader'\nimport BuilderCardDropdownHeader from 'src/timeMachine/components/builderCard/BuilderCardDropdownHeader'\nimport BuilderCardMenu from 'src/timeMachine/components/builderCard/BuilderCardMenu'\nimport BuilderCardBody from 'src/timeMachine/components/builderCard/BuilderCardBody'\nimport BuilderCardEmpty from 'src/timeMachine/components/builderCard/BuilderCardEmpty'\n\ninterface Props {\n testID: string\n className?: string\n widthPixels: number\n}\n\nexport default class BuilderCard extends PureComponent {\n public static Header = BuilderCardHeader\n public static DropdownHeader = BuilderCardDropdownHeader\n public static Menu = BuilderCardMenu\n public static Body = BuilderCardBody\n public static Empty = BuilderCardEmpty\n\n public static defaultProps = {\n testID: 'builder-card',\n widthPixels: 228,\n }\n\n public render() {\n const {children, testID, className, widthPixels} = this.props\n\n const classname = classnames('builder-card', {[`${className}`]: className})\n\n const style = {flex: `0 0 ${widthPixels}px`}\n\n return (\n
\n {children}\n
\n )\n }\n}\n","// Actions\nimport {notify} from 'src/shared/actions/notifications'\n\n// Constants\nimport {readLimitReached} from 'src/shared/copy/notifications'\n\n// Types\nimport {\n Bucket,\n GetState,\n RemoteDataState,\n ResourceType,\n ColumnTypes,\n} from 'src/types'\nimport {\n Limit as Limits,\n LimitStatus as GenLimitStatus,\n} from 'src/client/cloudPrivRoutes'\n// Selectors\nimport {\n extractDashboardMax,\n extractBucketMax,\n extractTaskMax,\n extractChecksMax,\n extractRulesMax,\n extractEndpointsMax,\n} from 'src/cloud/utils/limits'\nimport {getOrg} from 'src/organizations/selectors'\nimport {getAll} from 'src/resources/selectors'\nimport {CLOUD} from 'src/shared/constants'\n\nlet getOrgsLimits = null\nlet getOrgsLimitsStatus = null\n\nif (CLOUD) {\n getOrgsLimits = require('src/client/cloudPrivRoutes').getOrgsLimits\n getOrgsLimitsStatus =\n require('src/client/cloudPrivRoutes').getOrgsLimitsStatus\n}\n\nexport interface LimitStatus extends GenLimitStatus {}\n\nexport interface Limit {\n maxAllowed: number\n limitStatus: LimitStatus['status']\n}\n\nexport type MonitoringLimits = {\n [type in ColumnTypes]: LimitStatus['status']\n}\n\nexport enum ActionTypes {\n SetLimits = 'SET_LIMITS',\n SetLimitsStatus = 'SET_LIMITS_STATUS',\n SetDashboardLimitStatus = 'SET_DASHBOARD_LIMIT_STATUS',\n SetBucketLimitStatus = 'SET_BUCKET_LIMIT_STATUS',\n SetTaskLimitStatus = 'SET_TASK_LIMIT_STATUS',\n SetChecksLimitStatus = 'SET_CHECKS_LIMIT_STATUS',\n SetRulesLimitStatus = 'SET_RULES_LIMIT_STATUS',\n SetEndpointsLimitStatus = 'SET_ENDPOINTS_LIMIT_STATUS',\n SetQueryTimeRateLimitStatus = 'SET_QUERY_TIME_RATE_LIMIT_STATUS',\n SetReadRateLimitStatus = 'SET_READ_RATE_LIMIT_STATUS',\n SetWriteRateLimitStatus = 'SET_WRITE_RATE_LIMIT_STATUS',\n SetCardinalityLimitStatus = 'SET_CARDINALITY_LIMIT_STATUS',\n}\n\nexport type Actions =\n | SetLimits\n | SetLimitsStatus\n | SetDashboardLimitStatus\n | SetBucketLimitStatus\n | SetTaskLimitStatus\n | SetChecksLimitStatus\n | SetRulesLimitStatus\n | SetEndpointsLimitStatus\n | SetQueryTimeRateLimitStatus\n | SetReadRateLimitStatus\n | SetWriteRateLimitStatus\n | SetCardinalityLimitStatus\n\nexport interface SetLimits {\n type: ActionTypes.SetLimits\n payload: {limits: Limits}\n}\n\nexport const setLimits = (limits: Limits): SetLimits => {\n return {\n type: ActionTypes.SetLimits,\n payload: {limits},\n }\n}\n\nexport interface SetDashboardLimitStatus {\n type: ActionTypes.SetDashboardLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setDashboardLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetDashboardLimitStatus => {\n return {\n type: ActionTypes.SetDashboardLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetBucketLimitStatus {\n type: ActionTypes.SetBucketLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setBucketLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetBucketLimitStatus => {\n return {\n type: ActionTypes.SetBucketLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetTaskLimitStatus {\n type: ActionTypes.SetTaskLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setTaskLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetTaskLimitStatus => {\n return {\n type: ActionTypes.SetTaskLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetChecksLimitStatus {\n type: ActionTypes.SetChecksLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setChecksLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetChecksLimitStatus => {\n return {\n type: ActionTypes.SetChecksLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetRulesLimitStatus {\n type: ActionTypes.SetRulesLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setRulesLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetRulesLimitStatus => {\n return {\n type: ActionTypes.SetRulesLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetEndpointsLimitStatus {\n type: ActionTypes.SetEndpointsLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setEndpointsLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetEndpointsLimitStatus => {\n return {\n type: ActionTypes.SetEndpointsLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetQueryTimeRateLimitStatus {\n type: ActionTypes.SetQueryTimeRateLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const SetQueryTimeRateLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetQueryTimeRateLimitStatus => {\n return {\n type: ActionTypes.SetQueryTimeRateLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetReadRateLimitStatus {\n type: ActionTypes.SetReadRateLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setReadRateLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetReadRateLimitStatus => {\n return {\n type: ActionTypes.SetReadRateLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetWriteRateLimitStatus {\n type: ActionTypes.SetWriteRateLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setWriteRateLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetWriteRateLimitStatus => {\n return {\n type: ActionTypes.SetWriteRateLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetCardinalityLimitStatus {\n type: ActionTypes.SetCardinalityLimitStatus\n payload: {limitStatus: LimitStatus['status']}\n}\n\nexport const setCardinalityLimitStatus = (\n limitStatus: LimitStatus['status']\n): SetCardinalityLimitStatus => {\n return {\n type: ActionTypes.SetCardinalityLimitStatus,\n payload: {limitStatus},\n }\n}\n\nexport interface SetLimitsStatus {\n type: ActionTypes.SetLimitsStatus\n payload: {\n status: RemoteDataState\n }\n}\n\nexport const setLimitsStatus = (status: RemoteDataState): SetLimitsStatus => {\n return {\n type: ActionTypes.SetLimitsStatus,\n payload: {status},\n }\n}\n\nexport const getReadWriteCardinalityLimits =\n () => async (dispatch, getState: GetState) => {\n if (!CLOUD) {\n return\n }\n try {\n const org = getOrg(getState())\n\n const resp = await getOrgsLimitsStatus({orgID: org.id})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n const limits = resp.data\n\n if (limits.read.status === 'exceeded') {\n dispatch(notify(readLimitReached()))\n dispatch(setReadRateLimitStatus('exceeded'))\n } else {\n dispatch(setReadRateLimitStatus('ok'))\n }\n\n if (limits.write.status === 'exceeded') {\n dispatch(setWriteRateLimitStatus('exceeded'))\n } else {\n dispatch(setWriteRateLimitStatus('ok'))\n }\n\n if (limits.cardinality.status === 'exceeded') {\n dispatch(setCardinalityLimitStatus('exceeded'))\n } else {\n dispatch(setCardinalityLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n }\n\nexport const getAssetLimits = () => async (dispatch, getState: GetState) => {\n if (!CLOUD) {\n return\n }\n dispatch(setLimitsStatus(RemoteDataState.Loading))\n try {\n const org = getOrg(getState())\n\n const resp = await getOrgsLimits({orgID: org.id})\n\n if (resp.status !== 200) {\n throw new Error(resp.data.message)\n }\n\n dispatch(setLimits(resp.data))\n dispatch(setLimitsStatus(RemoteDataState.Done))\n } catch (error) {\n console.error(error)\n dispatch(setLimitsStatus(RemoteDataState.Error))\n }\n}\n\nexport const checkDashboardLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n const {resources} = state\n\n const dashboardsMax = extractDashboardMax(state)\n const dashboardsCount = resources.dashboards.allIDs.length\n\n if (dashboardsCount >= dashboardsMax) {\n dispatch(setDashboardLimitStatus('exceeded'))\n } else {\n dispatch(setDashboardLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const checkBucketLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n const allBuckets = getAll(state, ResourceType.Buckets)\n const bucketsMax = extractBucketMax(state)\n const buckets = allBuckets.filter(bucket => {\n return bucket.type == 'user'\n })\n const bucketsCount = buckets.length\n\n if (bucketsCount >= bucketsMax) {\n dispatch(setBucketLimitStatus('exceeded'))\n } else {\n dispatch(setBucketLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const checkTaskLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n const tasksMax = extractTaskMax(state)\n const tasksCount = state.resources.tasks.allIDs.length\n\n if (tasksCount >= tasksMax) {\n dispatch(setTaskLimitStatus('exceeded'))\n } else {\n dispatch(setTaskLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const checkChecksLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n\n const checksMax = extractChecksMax(state)\n const checksCount = state.resources.checks.allIDs.length\n if (checksCount >= checksMax) {\n dispatch(setChecksLimitStatus('exceeded'))\n } else {\n dispatch(setChecksLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const checkRulesLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n\n const rulesMax = extractRulesMax(state)\n const rulesCount = state.resources.rules.allIDs.length\n\n if (rulesCount >= rulesMax) {\n dispatch(setRulesLimitStatus('exceeded'))\n } else {\n dispatch(setRulesLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const checkEndpointsLimits = () => (dispatch, getState: GetState) => {\n try {\n const state = getState()\n const endpointsCount = state.resources.endpoints.allIDs.length\n const endpointsMax = extractEndpointsMax(state)\n\n if (endpointsCount >= endpointsMax) {\n dispatch(setEndpointsLimitStatus('exceeded'))\n } else {\n dispatch(setEndpointsLimitStatus('ok'))\n }\n } catch (error) {\n console.error(error)\n }\n}\n","// Libraries\nimport {parse} from 'src/languageSupport/languages/flux/parser'\nimport {get, sortBy} from 'lodash'\n\n// API\nimport {runQuery, RunQuerySuccessResult} from 'src/shared/apis/query'\nimport {\n getCachedResultsOrRunQuery,\n resetQueryCacheByQuery,\n} from 'src/shared/apis/queryCache'\nimport {runStatusesQuery} from 'src/alerting/utils/statusEvents'\n\n// Actions\nimport {notify} from 'src/shared/actions/notifications'\nimport {hydrateVariables} from 'src/variables/actions/thunks'\n\n// Constants\nimport {rateLimitReached, resultTooLarge} from 'src/shared/copy/notifications'\n\n// Utils\nimport {buildUsedVarsOption} from 'src/variables/utils/buildVarsOption'\nimport {findNodes} from 'src/shared/utils/ast'\nimport {event} from 'src/cloud/utils/reporting'\nimport {asSimplyKeyValueVariables, hashCode} from 'src/shared/apis/queryCache'\nimport {filterUnusedVarsBasedOnQuery} from 'src/shared/utils/filterUnusedVars'\n\n// Types\nimport {CancelBox} from 'src/types/promises'\nimport {\n GetState,\n RemoteDataState,\n StatusRow,\n Node,\n ResourceType,\n Bucket,\n QueryEditMode,\n BuilderTagsType,\n Variable,\n} from 'src/types'\n\n// Selectors\nimport {getOrg} from 'src/organizations/selectors'\nimport {getAll} from 'src/resources/selectors/index'\nimport {isCurrentPageDashboard} from 'src/dashboards/selectors'\nimport {getAllVariables} from 'src/variables/selectors'\nimport {getActiveTimeMachine, getActiveQuery} from 'src/timeMachine/selectors'\n\nexport type Action = SaveDraftQueriesAction | SetQueryResults\n\ninterface SetQueryResults {\n type: 'SET_QUERY_RESULTS'\n payload: {\n status: RemoteDataState\n files?: string[]\n fetchDuration?: number\n errorMessage?: string\n statuses?: StatusRow[][]\n }\n}\n\nexport const setQueryResults = (\n status: RemoteDataState,\n files?: string[],\n fetchDuration?: number,\n errorMessage?: string,\n statuses?: StatusRow[][]\n): SetQueryResults => ({\n type: 'SET_QUERY_RESULTS',\n payload: {\n status,\n files,\n fetchDuration,\n errorMessage,\n statuses,\n },\n})\n\nlet pendingCheckStatuses: CancelBox = null\n\nexport const getOrgIDFromBuckets = (\n text: string,\n allBuckets: Bucket[]\n): string | null => {\n try {\n const ast = parse(text)\n const bucketsInQuery: string[] = findNodes(ast, isFromBucket).map(node =>\n get(node, 'arguments.0.properties.0.value.value', '')\n )\n\n // if there are buckets from multiple orgs in a query, query will error, and user will receive error from query\n const bucketMatch = allBuckets.find(a => bucketsInQuery.includes(a.name))\n\n return get(bucketMatch, 'orgID', null)\n } catch (e) {\n console.error(e)\n return null\n }\n}\n\n// We only need a minimum of one bucket, function, and tag,\nexport const getQueryFromFlux = (text: string) => {\n const ast = parse(text)\n\n const aggregateWindowQuery: string[] = findNodes(ast, isFromFunction).map(\n node => get(node, 'arguments.0.properties.0.value.values.0.magnitude', '')\n )\n\n const bucketsInQuery: string[] = findNodes(ast, isFromBucket).map(node =>\n get(node, 'arguments.0.properties.0.value.value', '')\n )\n\n const functionsInQuery: string[] = findNodes(ast, isFromFunction).map(node =>\n get(node, 'arguments.0.properties.1.value.name', '')\n )\n\n const tagsKeysInQuery: string[] = findNodes(ast, isFromTag).map(node =>\n get(node, 'arguments.0.properties.0.value.body.left.property.value', '')\n )\n\n const tagsValuesInQuery: string[] = findNodes(ast, isFromTag).map(node =>\n get(node, 'arguments.0.properties.0.value.body.right.value', '')\n )\n\n const functionName = functionsInQuery.join()\n const aggregateWindowName = aggregateWindowQuery.join()\n const firstTagKey = tagsKeysInQuery.pop()\n const firstValueKey = tagsValuesInQuery.pop()\n\n // we need [bucket], functions=[{1}], tags = [{aggregateFunctionType: \"filter\",key: \"_measurement\",values:[\"cpu\", \"disk\"]}]\n return {\n builderConfig: {\n buckets: bucketsInQuery,\n functions: [{name: functionName}],\n tags: [\n {\n aggregateFunctionType: 'filter',\n key: firstTagKey,\n values: [firstValueKey],\n } as BuilderTagsType,\n ],\n aggregateWindow: {period: aggregateWindowName},\n },\n editMode: 'builder' as QueryEditMode,\n name: '',\n text: text,\n }\n}\n\nconst isFromBucket = (node: Node) => {\n return (\n get(node, 'type') === 'CallExpression' &&\n get(node, 'callee.type') === 'Identifier' &&\n get(node, 'callee.name') === 'from' &&\n get(node, 'arguments.0.properties.0.key.name') === 'bucket'\n )\n}\n\nconst isFromFunction = (node: Node) => {\n return (\n get(node, 'callee.type') === 'Identifier' &&\n get(node, 'callee.name') === 'aggregateWindow' &&\n get(node, 'arguments.0.properties.1.key.name') === 'fn'\n )\n}\n\nconst isFromTag = (node: Node) => {\n return (\n get(node, 'callee.type') === 'Identifier' &&\n get(node, 'callee.name') === 'filter' &&\n get(node, 'arguments.0.properties.0.value.type') === 'FunctionExpression'\n )\n}\n\nexport const generateHashedQueryID = (\n query: string,\n vars: Variable[],\n orgID: string\n): string => {\n const hashedQuery = `${hashCode(query)}`\n const usedVars = filterUnusedVarsBasedOnQuery(vars, [query])\n const variables = sortBy(usedVars, ['name'])\n const simplifiedVariables = variables.map(v => asSimplyKeyValueVariables(v))\n const stringifiedVars = JSON.stringify(simplifiedVariables)\n // create the queryID based on the query & vars\n const hashedVariables = `${hashCode(stringifiedVars)}`\n\n return `${hashedQuery}_${hashedVariables}_${hashCode(orgID)}`\n}\n\nconst queryReference = {}\n\nexport const cancelQueryByHashID = (queryID: string): void => {\n if (queryID in queryReference) {\n queryReference[queryID].cancel()\n delete queryReference[queryID]\n }\n}\n\nconst cancelQuerysByHashIDs = (queryIDs?: string[]): void => {\n if (queryIDs.length > 0) {\n queryIDs.forEach(queryID => cancelQueryByHashID(queryID))\n }\n Object.keys(queryReference).forEach((queryID: string) => {\n cancelQueryByHashID(queryID)\n })\n}\n\nexport const cancelAllRunningQueries = () => dispatch => {\n cancelQuerysByHashIDs(Object.keys(queryReference))\n dispatch(setQueryResults(RemoteDataState.Done, null, null))\n}\n\nexport const setQueryByHashID = (queryID: string, result: any): void => {\n queryReference[queryID] = {\n cancel: result.cancel,\n issuedAt: Date.now(),\n promise: result.promise,\n status: RemoteDataState.Loading,\n }\n result.promise\n .then(() => {\n queryReference[queryID].status = RemoteDataState.Done\n })\n .catch(error => {\n if (error.name === 'CancellationError' || error.name === 'AbortError') {\n if (queryID in queryReference) {\n queryReference[queryID].status = RemoteDataState.Done\n } else {\n queryReference[queryID] = {\n ...queryReference[queryID],\n status: RemoteDataState.Done,\n }\n }\n return\n }\n if (queryID in queryReference) {\n queryReference[queryID].status = RemoteDataState.Error\n } else {\n queryReference[queryID] = {\n ...queryReference[queryID],\n status: RemoteDataState.Error,\n }\n }\n })\n}\n\nexport const executeQueries =\n (abortController?: AbortController) =>\n async (dispatch, getState: GetState) => {\n const executeQueriesStartTime = Date.now()\n\n const state = getState()\n\n const allBuckets = getAll(state, ResourceType.Buckets)\n\n const activeTimeMachine = getActiveTimeMachine(state)\n const queries = activeTimeMachine.view.properties.queries.filter(\n ({text}) => !!text.trim()\n )\n\n if (!queries.length) {\n dispatch(setQueryResults(RemoteDataState.Done, [], null))\n }\n\n try {\n // Cancel pending queries before issuing new ones\n cancelAllRunningQueries()\n\n dispatch(setQueryResults(RemoteDataState.Loading, [], null))\n\n await dispatch(hydrateVariables())\n\n const allVariables = getAllVariables(state)\n const startTime = window.performance.now()\n const startDate = Date.now()\n\n const pendingResults = queries.map(({text}) => {\n event('executeQueries query', {}, {query: text})\n const orgID = getOrgIDFromBuckets(text, allBuckets) || getOrg(state).id\n\n if (getOrg(state).id === orgID) {\n event('orgData_queried')\n }\n\n const extern = buildUsedVarsOption(text, allVariables)\n\n event('runQuery', {context: 'timeMachine'})\n\n const queryID = generateHashedQueryID(text, allVariables, orgID)\n if (isCurrentPageDashboard(state)) {\n // reset any existing matching query in the cache\n resetQueryCacheByQuery(text, getAllVariables(state))\n const result = getCachedResultsOrRunQuery(\n orgID,\n text,\n getAllVariables(state)\n )\n setQueryByHashID(queryID, result)\n\n return result\n }\n const result = runQuery(orgID, text, extern, abortController)\n setQueryByHashID(queryID, result)\n return result\n })\n const results = await Promise.all(pendingResults.map(r => r.promise))\n\n const duration = window.performance.now() - startTime\n\n event('executeQueries querying', {time: startDate}, {duration})\n\n let statuses = [[]] as StatusRow[][]\n const {\n alertBuilder: {id: checkID},\n } = state\n\n if (checkID) {\n const extern = buildUsedVarsOption(\n queries.map(query => query.text),\n allVariables\n )\n pendingCheckStatuses = runStatusesQuery(\n getOrg(state).id,\n checkID,\n extern\n )\n statuses = await pendingCheckStatuses.promise\n }\n\n for (const result of results) {\n if (result.type === 'UNKNOWN_ERROR') {\n throw new Error(result.message)\n }\n\n if (result.type === 'RATE_LIMIT_ERROR') {\n dispatch(notify(rateLimitReached(result.retryAfter)))\n\n throw new Error(result.message)\n }\n\n if (result.didTruncate) {\n dispatch(notify(resultTooLarge(result.bytesRead)))\n }\n }\n\n const files = (results as RunQuerySuccessResult[]).map(r => r.csv)\n dispatch(\n setQueryResults(RemoteDataState.Done, files, duration, null, statuses)\n )\n\n event(\n 'executeQueries function',\n {\n time: executeQueriesStartTime,\n },\n {duration: Date.now() - executeQueriesStartTime}\n )\n\n return results\n } catch (error) {\n if (error.name === 'CancellationError' || error.name === 'AbortError') {\n dispatch(setQueryResults(RemoteDataState.Done, null, null))\n return\n }\n\n console.error(error)\n dispatch(\n setQueryResults(RemoteDataState.Error, null, null, error.message)\n )\n }\n }\n\ninterface SaveDraftQueriesAction {\n type: 'SAVE_DRAFT_QUERIES'\n}\n\nconst saveDraftQueries = (): SaveDraftQueriesAction => ({\n type: 'SAVE_DRAFT_QUERIES',\n})\n\nexport const saveAndExecuteQueries =\n (abortController?: AbortController) => dispatch => {\n dispatch(saveDraftQueries())\n dispatch(setQueryResults(RemoteDataState.Loading, [], null))\n dispatch(executeQueries(abortController))\n }\n\nexport const executeCheckQuery = () => async (dispatch, getState: GetState) => {\n const state = getState()\n const {text} = getActiveQuery(state)\n const {id: orgID} = getOrg(state)\n\n if (text == '') {\n dispatch(setQueryResults(RemoteDataState.Done, [], null))\n }\n\n try {\n dispatch(setQueryResults(RemoteDataState.Loading, null, null, null))\n\n const startTime = Date.now()\n\n const extern = parse(\n 'import \"influxdata/influxdb/monitor\"\\noption monitor.write = yield'\n )\n\n const result = await runQuery(orgID, text, extern).promise\n const duration = Date.now() - startTime\n\n if (result.type === 'UNKNOWN_ERROR') {\n throw new Error(result.message)\n }\n\n if (result.type === 'RATE_LIMIT_ERROR') {\n dispatch(notify(rateLimitReached(result.retryAfter)))\n\n throw new Error(result.message)\n }\n\n if (result.didTruncate) {\n dispatch(notify(resultTooLarge(result.bytesRead)))\n }\n\n const file = result.csv\n\n dispatch(setQueryResults(RemoteDataState.Done, [file], duration, null))\n } catch (e) {\n if (e.name === 'CancellationError') {\n return\n }\n\n console.error(e)\n dispatch(setQueryResults(RemoteDataState.Error, null, null, e.message))\n }\n}\n","import {Dispatch, Action, Middleware} from 'redux'\n\n// Trigger resize event to re-layout the React Layout plugin\nexport const resizeLayout: Middleware =\n () => (next: Dispatch) => (action: Action) => {\n next(action)\n\n if (\n action.type === 'ENABLE_PRESENTATION_MODE' ||\n action.type === 'DISABLE_PRESENTATION_MODE'\n ) {\n // Uses longer event object creation method due to IE compatibility.\n const evt = document.createEvent('HTMLEvents')\n evt.initEvent('resize', false, true)\n window.dispatchEvent(evt)\n }\n }\n","import {Middleware, Dispatch, Action} from 'redux'\n\nimport {enablePresentationMode} from 'src/shared/actions/app'\n\nexport const queryStringConfig: Middleware =\n () => (dispatch: Dispatch) => (action: Action) => {\n dispatch(action)\n\n if (new URLSearchParams(window.location.search).get('present') === 'true') {\n dispatch(enablePresentationMode())\n }\n }\n","import {combineReducers} from 'redux'\n\n// Types\nimport {ActionTypes, Action} from 'src/shared/actions/app'\nimport {AUTOREFRESH_DEFAULT_INTERVAL} from 'src/shared/constants'\nimport {TimeZone, NavBarState, Theme, VersionInfo, FlowsCTA} from 'src/types'\n\nexport interface AppState {\n ephemeral: {\n inPresentationMode: boolean\n }\n persisted: {\n autoRefresh: number\n showTemplateControlBar: boolean\n timeZone: TimeZone\n navBarState: NavBarState\n fluxQueryBuilder: boolean\n theme: Theme\n versionInfo: VersionInfo\n flowsCTA: FlowsCTA\n subscriptionsCertificateInterest: boolean\n }\n}\n\nconst initialState: AppState = {\n ephemeral: {\n inPresentationMode: false,\n },\n persisted: {\n theme: 'dark',\n autoRefresh: AUTOREFRESH_DEFAULT_INTERVAL,\n showTemplateControlBar: false,\n timeZone: 'Local',\n navBarState: 'collapsed',\n fluxQueryBuilder: false,\n versionInfo: {version: '', commit: ''},\n flowsCTA: {explorer: true, tasks: true, alerts: true},\n subscriptionsCertificateInterest: false,\n },\n}\n\nconst {\n ephemeral: initialAppEphemeralState,\n persisted: initialAppPersistedState,\n} = initialState\n\nconst appEphemeralReducer = (\n state = initialAppEphemeralState,\n action: Action\n): AppState['ephemeral'] => {\n switch (action.type) {\n case ActionTypes.EnablePresentationMode: {\n return {\n ...state,\n inPresentationMode: true,\n }\n }\n\n case ActionTypes.DisablePresentationMode: {\n return {\n ...state,\n inPresentationMode: false,\n }\n }\n\n default:\n return state\n }\n}\n\nconst appPersistedReducer = (\n state = initialAppPersistedState,\n action: Action\n): AppState['persisted'] => {\n switch (action.type) {\n case 'SET_THEME': {\n return {...state, theme: action.theme}\n }\n\n case ActionTypes.SetAutoRefresh: {\n return {\n ...state,\n autoRefresh: action.payload.milliseconds,\n }\n }\n\n case ActionTypes.SetVersionInfo: {\n return {\n ...state,\n versionInfo: action.payload.versionInfo,\n }\n }\n\n case ActionTypes.SetTimeZone: {\n const {timeZone} = action.payload\n\n return {...state, timeZone}\n }\n\n case ActionTypes.SetFluxQueryBuilder: {\n return {...state, fluxQueryBuilder: action.active}\n }\n\n case ActionTypes.SetNavBarState: {\n const navBarState = action.navBarState\n return {\n ...state,\n navBarState,\n }\n }\n\n case ActionTypes.SetFlowsCTA: {\n return {\n ...state,\n flowsCTA: {\n ...state.flowsCTA,\n ...action.payload.flowsCTA,\n },\n }\n }\n\n case ActionTypes.SetSubscriptionsCertificateInterest: {\n return {\n ...state,\n subscriptionsCertificateInterest: true,\n }\n }\n\n default:\n return state\n }\n}\n\nconst appReducer = combineReducers({\n ephemeral: appEphemeralReducer,\n persisted: appPersistedReducer,\n})\n\nexport default appReducer\n","import {\n Action,\n SET_CURRENT_DASHBOARD,\n} from 'src/shared/actions/currentDashboard'\n\nexport interface CurrentDashboardState {\n id: string\n}\n\nexport const initialState: CurrentDashboardState = {\n id: '',\n}\n\nconst reducer = (\n state: CurrentDashboardState = initialState,\n action: Action\n): CurrentDashboardState => {\n switch (action.type) {\n case SET_CURRENT_DASHBOARD:\n state.id = action.id\n return {...state}\n default:\n return state\n }\n}\n\nexport default reducer\n","import {produce} from 'immer'\nimport {nanoid} from 'nanoid'\nimport {Action} from 'src/shared/actions/notifications'\nimport {Notification} from 'src/types'\n\nexport const initialState: Notification[] = []\n\nexport const notificationsReducer = (\n state = initialState,\n action: Action\n): Notification[] =>\n produce(state, draftState => {\n switch (action.type) {\n case 'PUBLISH_NOTIFICATION': {\n const {notification} = action.payload\n const publishedNotification = {\n ...notification,\n id: nanoid(),\n }\n const matchIndex = state.findIndex(\n n =>\n (n.type && notification.type && n.type === notification.type) ||\n (n.message && n.message === notification.message)\n )\n const isUnique = matchIndex === -1\n if (isUnique) {\n draftState.unshift(publishedNotification)\n }\n return\n }\n\n case 'DISMISS_NOTIFICATION': {\n const {id} = action.payload\n return draftState.filter(n => n.id !== id)\n }\n\n case 'DISMISS_ALL_NOTIFICATIONS': {\n return []\n }\n }\n })\n","import app from 'src/shared/reducers/app'\nimport currentDashboard from 'src/shared/reducers/currentDashboard'\nimport {notificationsReducer} from 'src/shared/reducers/notifications'\n\nexport default {\n app,\n currentDashboard,\n notifications: notificationsReducer,\n}\n","// Libraries\nimport produce from 'immer'\n\nimport {CurrentIdentity} from '../apis/auth'\nimport {RemoteDataState} from 'src/types'\n\n// Actions\nimport {\n Actions,\n SET_QUARTZ_IDENTITY,\n SET_QUARTZ_IDENTITY_STATUS,\n SET_CURRENT_BILLING_PROVIDER,\n SET_CURRENT_ORG_DETAILS,\n} from 'src/identity/actions/creators'\n\nexport const initialState: CurrentIdentity = {\n user: {\n accountCount: 0,\n email: '',\n firstName: '',\n id: '',\n lastName: '',\n operatorRole: null,\n orgCount: 0,\n },\n org: {\n clusterHost: '',\n id: '',\n name: '',\n },\n account: {\n id: 0,\n name: '',\n type: 'free',\n accountCreatedAt: '',\n paygCreditStartDate: '',\n },\n status: RemoteDataState.NotStarted,\n}\n\nexport default (state = initialState, action: Actions): CurrentIdentity =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_QUARTZ_IDENTITY: {\n const {account, org, user} = action.identity\n\n // Store account information from /identity in state.\n draftState.account.accountCreatedAt = account.accountCreatedAt\n draftState.account.id = account.id\n draftState.account.name = account.name\n draftState.account.paygCreditStartDate = account.paygCreditStartDate\n draftState.account.type = account.type\n\n // Store org information from /identity in state.\n draftState.org.clusterHost = org.clusterHost\n draftState.org.id = org.id\n draftState.org.name = org.name\n\n // Store user information from /identity in state.\n draftState.user.accountCount = user.accountCount\n draftState.user.email = user.email\n draftState.user.firstName = user.firstName\n draftState.user.id = user.id\n draftState.user.lastName = user.lastName\n draftState.user.operatorRole = user.operatorRole\n draftState.user.orgCount = user.orgCount\n\n draftState = action.identity\n draftState.status = RemoteDataState.Done\n return\n }\n case SET_QUARTZ_IDENTITY_STATUS: {\n draftState.status = action.status\n return\n }\n case SET_CURRENT_BILLING_PROVIDER: {\n draftState.account.billingProvider = action.billingProvider\n return\n }\n case SET_CURRENT_ORG_DETAILS: {\n draftState.org = action.org\n return\n }\n }\n })\n","import {\n Actions,\n SET_FEATURE_FLAGS,\n SET_PUBLIC_FEATURE_FLAGS,\n RESET_FEATURE_FLAGS,\n CLEAR_FEATURE_FLAG_OVERRIDES,\n SET_FEATURE_FLAG_OVERRIDE,\n SET_FEATURE_FLAG_OVERRIDES,\n FlagMap,\n} from 'src/shared/actions/flags'\nimport {RemoteDataState} from 'src/types'\n\nexport interface FlagState {\n status: RemoteDataState\n original: FlagMap\n override: FlagMap\n}\n\nconst defaultState: FlagState = {\n status: RemoteDataState.NotStarted,\n original: {},\n override: {},\n}\n\nexport default (state = defaultState, action: Actions): FlagState => {\n switch (action.type) {\n case SET_FEATURE_FLAGS:\n // just setting the loading state\n if (!action.payload.flags) {\n const newState = {\n ...state,\n status: action.payload.status,\n }\n\n if (!state.hasOwnProperty('original')) {\n newState.original = defaultState.original\n }\n\n return newState\n }\n return {\n ...state,\n status: action.payload.status,\n original: action.payload.flags,\n }\n case SET_PUBLIC_FEATURE_FLAGS:\n // just setting the loading state\n if (!action.payload.flags) {\n const newState = {\n ...state,\n }\n\n if (!state.hasOwnProperty('original')) {\n newState.original = defaultState.original\n }\n\n return newState\n }\n return {\n ...state,\n original: action.payload.flags,\n }\n case RESET_FEATURE_FLAGS:\n return {\n ...defaultState,\n }\n case CLEAR_FEATURE_FLAG_OVERRIDES:\n return {\n ...state,\n override: {},\n }\n case SET_FEATURE_FLAG_OVERRIDE:\n const override = {\n ...(state.override || {}),\n ...action.payload,\n }\n return {\n ...state,\n override,\n }\n case SET_FEATURE_FLAG_OVERRIDES:\n return {\n ...state,\n override: action.payload.flags,\n }\n default:\n return state\n }\n}\n","import {Action, SET_IS_AUTO_FUNCTION} from 'src/shared/actions/currentExplorer'\n\nexport interface CurrentExplorerState {\n isAutoFunction: boolean\n}\n\nexport const initialState: CurrentExplorerState = {\n isAutoFunction: true,\n}\n\nconst reducer = (\n state: CurrentExplorerState = initialState,\n action: Action\n): CurrentExplorerState => {\n switch (action.type) {\n case SET_IS_AUTO_FUNCTION:\n state.isAutoFunction = action.isAutoFunction\n return {...state}\n default:\n return state\n }\n}\n\nexport default reducer\n","// Types\nimport {RemoteDataState} from 'src/types'\nimport {Fluxdocs} from 'src/client/fluxdocsdRoutes'\nimport {Action, GET_FLUX_DOCS} from 'src/shared/actions/fluxDocs'\n\nexport interface FluxDocsState {\n status: string\n fluxDocs: Fluxdocs[]\n}\n\nconst INITIAL_STATE: FluxDocsState = {\n status: RemoteDataState.NotStarted,\n fluxDocs: [],\n}\n\nexport default (state = INITIAL_STATE, action: Action): FluxDocsState => {\n switch (action.type) {\n case GET_FLUX_DOCS:\n return {...state, fluxDocs: action.payload.data}\n default:\n return state\n }\n}\n","import {\n RemoteDataState,\n ResourceState,\n TaskOptions,\n TaskSchedule,\n} from 'src/types'\n\nexport const initialState = (): ResourceState['tasks'] => ({\n allIDs: [],\n byID: {},\n status: RemoteDataState.NotStarted,\n newScript: '',\n currentTask: null,\n currentScript: '',\n searchTerm: '',\n showInactive: true,\n taskOptions: defaultOptions,\n runStatus: RemoteDataState.NotStarted,\n runs: [],\n logs: [],\n currentPage: 'TasksPage',\n})\n\nexport const defaultOptions: TaskOptions = {\n name: '',\n interval: '',\n offset: '',\n cron: '',\n taskScheduleType: TaskSchedule.unselected,\n orgID: '',\n toBucketName: '',\n toOrgName: '',\n}\n","// Libraries\nimport {get} from 'lodash'\n\n// Types\nimport {ResourceType, NormalizedState, RemoteDataState} from 'src/types'\n\nexport const setResourceAtID = (\n draftState: NormalizedState,\n action,\n resource: ResourceType\n) => {\n const {schema, status, id} = action\n\n const prevResource = get(draftState, ['byID', id], {})\n const currentResource = get(schema, ['entities', resource, id], {})\n\n if (!draftState.allIDs.includes(id)) {\n draftState.allIDs.push(id)\n }\n\n draftState.byID[id] = {...prevResource, ...currentResource, status}\n}\n\nexport const setResource = (\n draftState: NormalizedState,\n action,\n resource: ResourceType\n) => {\n const {status, schema} = action\n draftState.status = status\n if (get(schema, ['entities', resource])) {\n draftState.byID = schema.entities[resource]\n draftState.allIDs = schema.result\n }\n\n return\n}\n\nexport const addResource = (\n draftState: NormalizedState,\n action,\n resource: ResourceType\n) => {\n const {result, entities} = action.schema\n\n draftState.byID[result] = entities[resource][result]\n draftState.allIDs.push(result)\n}\n\nexport const editResource = (\n draftState: NormalizedState,\n action,\n resource: ResourceType\n) => {\n const {entities, result} = action.schema\n\n draftState.byID[result] = entities[resource][result]\n}\n\ninterface RemoveAction {\n type: string\n id: string\n}\n\nexport const removeResource = (\n draftState: NormalizedState,\n action: RemoveAction\n) => {\n const {id} = action\n delete draftState.byID[id]\n draftState.allIDs = draftState.allIDs.filter(uuid => uuid !== id)\n\n return\n}\n\nexport const setRelation = (\n draftState: NormalizedState,\n childType: ResourceType,\n childID: string,\n parentID: string\n) => {\n const resource = draftState.byID[parentID]\n\n if (!resource) {\n return\n }\n\n const child = draftState.byID[parentID][childType]\n\n if (!child) {\n return\n }\n\n draftState.byID[parentID][childType].push(childID)\n}\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {\n Action,\n ADD_TASK,\n SET_TASKS,\n CLEAR_TASK,\n CLEAR_CURRENT_TASK,\n SET_RUNS,\n SET_TASK_OPTION,\n SET_ALL_TASK_OPTIONS,\n SET_NEW_SCRIPT,\n SET_CURRENT_SCRIPT,\n SET_CURRENT_TASK,\n SET_SEARCH_TERM,\n SET_SHOW_INACTIVE,\n SET_LOGS,\n EDIT_TASK,\n REMOVE_TASK,\n SET_CURRENT_TASKS_PAGE,\n} from 'src/tasks/actions/creators'\nimport {ResourceType, ResourceState, TaskSchedule, Task} from 'src/types'\n\n// Utils\nimport {initialState, defaultOptions} from 'src/tasks/reducers/helpers'\nimport {\n setResource,\n editResource,\n removeResource,\n addResource,\n} from 'src/resources/reducers/helpers'\n\ntype TasksState = ResourceState['tasks']\n\nexport default (\n state: TasksState = initialState(),\n action: Action\n): TasksState =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_TASKS: {\n setResource(draftState, action, ResourceType.Tasks)\n\n return\n }\n\n case EDIT_TASK: {\n editResource(draftState, action, ResourceType.Tasks)\n\n return\n }\n\n case REMOVE_TASK: {\n removeResource(draftState, action)\n\n return\n }\n\n case ADD_TASK: {\n addResource(draftState, action, ResourceType.Tasks)\n\n return\n }\n\n case CLEAR_TASK: {\n draftState.taskOptions = {...defaultOptions}\n draftState.currentScript = ''\n draftState.newScript = ''\n\n return\n }\n\n case CLEAR_CURRENT_TASK: {\n draftState.currentScript = ''\n draftState.currentTask = null\n\n return\n }\n\n case SET_ALL_TASK_OPTIONS: {\n const {schema} = action\n const {entities, result} = schema\n const {name, every, cron, orgID, offset} = entities.tasks[result]\n let taskScheduleType = TaskSchedule.interval\n\n if (cron) {\n taskScheduleType = TaskSchedule.cron\n }\n\n draftState.taskOptions = {\n ...state.taskOptions,\n name,\n cron,\n interval: every,\n orgID,\n taskScheduleType,\n offset,\n }\n\n return\n }\n\n case SET_TASK_OPTION: {\n const {key, value} = action\n\n draftState.taskOptions[`${key}`] = value\n\n return\n }\n\n case SET_NEW_SCRIPT: {\n draftState.newScript = action.script\n\n return\n }\n\n case SET_CURRENT_SCRIPT: {\n draftState.currentScript = action.script\n\n return\n }\n\n case SET_CURRENT_TASK: {\n const {schema} = action\n const {entities, result} = schema\n\n const task = entities.tasks[result]\n\n const currentScript = task.flux || ''\n\n draftState.currentScript = currentScript\n draftState.currentTask = task\n\n return\n }\n\n case SET_SEARCH_TERM: {\n const {searchTerm} = action\n\n draftState.searchTerm = searchTerm\n\n return\n }\n\n case SET_SHOW_INACTIVE: {\n draftState.showInactive = !state.showInactive\n\n return\n }\n\n case SET_RUNS: {\n const {runs, runStatus} = action\n\n draftState.runs = runs\n draftState.runStatus = runStatus\n\n return\n }\n\n case SET_LOGS: {\n draftState.logs = action.logs\n\n return\n }\n\n case SET_CURRENT_TASKS_PAGE: {\n draftState.currentPage = action.tasksPage\n\n return\n }\n }\n })\n","import {TimeRange} from 'src/types'\nimport {Action, ActionTypes} from 'src/dashboards/actions/ranges'\n\nexport type RangeState = {\n [contextID: string]: TimeRange\n}\n\nconst initialState: RangeState = {}\n\nexport default (\n state: RangeState = initialState,\n action: Action\n): RangeState => {\n switch (action.type) {\n case ActionTypes.DeleteTimeRange: {\n const {dashboardID} = action.payload\n const {[dashboardID]: _, ...filteredRanges} = state\n\n return filteredRanges\n }\n\n case ActionTypes.RetainRangesDashboardTimeV1: {\n const {dashboardIDs} = action.payload\n const ranges = {}\n for (const key in state) {\n if (dashboardIDs.includes(key)) {\n ranges[key] = state[key]\n }\n }\n return ranges\n }\n\n case ActionTypes.SetDashboardTimeRange: {\n const {dashboardID, timeRange} = action.payload\n return {...state, [dashboardID]: timeRange}\n }\n }\n\n return state\n}\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {\n RemoteDataState,\n ResourceState,\n Dashboard,\n ResourceType,\n} from 'src/types'\n\n// Actions\nimport {\n Action,\n SET_DASHBOARD,\n SET_DASHBOARD_SORT,\n REMOVE_DASHBOARD,\n SET_DASHBOARDS,\n REMOVE_DASHBOARD_LABEL,\n EDIT_DASHBOARD,\n SET_DASHBOARDS_SEARCH_TERM,\n} from 'src/dashboards/actions/creators'\nimport {\n SET_CELLS,\n REMOVE_CELL,\n SET_CELL,\n Action as CellAction,\n} from 'src/cells/actions/creators'\nimport {SET_LABEL_ON_RESOURCE} from 'src/labels/actions/creators'\n\n// Utils\nimport {\n setResource,\n setResourceAtID,\n removeResource,\n editResource,\n setRelation,\n} from 'src/resources/reducers/helpers'\n\nimport {DEFAULT_DASHBOARD_SORT_OPTIONS} from 'src/dashboards/constants'\n\ntype DashboardsState = ResourceState['dashboards']\n\nconst initialState = (): DashboardsState => ({\n byID: {},\n allIDs: [],\n status: RemoteDataState.NotStarted,\n sortOptions: DEFAULT_DASHBOARD_SORT_OPTIONS,\n searchTerm: '',\n})\n\nexport const dashboardsReducer = (\n state: DashboardsState = initialState(),\n action: Action | CellAction\n): DashboardsState => {\n return produce(state, draftState => {\n switch (action.type) {\n case SET_DASHBOARDS: {\n setResource(draftState, action, ResourceType.Dashboards)\n\n return\n }\n\n case REMOVE_DASHBOARD: {\n removeResource(draftState, action)\n\n return\n }\n\n case SET_DASHBOARD: {\n setResourceAtID(draftState, action, ResourceType.Dashboards)\n\n return\n }\n\n case SET_DASHBOARD_SORT: {\n const {sortOptions} = action\n\n draftState.sortOptions = sortOptions\n\n return\n }\n\n case EDIT_DASHBOARD: {\n editResource(draftState, action, ResourceType.Dashboards)\n\n return\n }\n\n case REMOVE_CELL: {\n const {dashboardID, id} = action\n\n const {cells} = draftState.byID[dashboardID]\n\n draftState.byID[dashboardID].cells = cells.filter(cID => cID !== id)\n\n return\n }\n\n case SET_CELL: {\n const {schema} = action\n\n const cellID = schema.result\n const cell = schema.entities.cells[cellID]\n const dashboards = draftState.byID[cell.dashboardID]\n\n if (dashboards?.cells.includes(cellID)) {\n return\n }\n\n if (draftState.byID[cell.dashboardID]) {\n draftState.byID[cell.dashboardID].cells.push(cellID)\n }\n\n return\n }\n\n case SET_CELLS: {\n const {dashboardID, schema} = action\n\n const cellIDs = schema && schema.result\n\n if (!cellIDs) {\n return\n }\n\n draftState.byID[dashboardID].cells = cellIDs\n\n return\n }\n\n case SET_LABEL_ON_RESOURCE: {\n const {resourceID, schema} = action\n const labelID = schema.result\n\n setRelation(\n draftState,\n ResourceType.Labels,\n labelID,\n resourceID\n )\n\n return\n }\n\n case REMOVE_DASHBOARD_LABEL: {\n const {dashboardID, labelID} = action\n\n const {labels} = draftState.byID[dashboardID]\n\n draftState.byID[dashboardID].labels = labels.filter(\n label => label !== labelID\n )\n\n return\n }\n\n case SET_DASHBOARDS_SEARCH_TERM: {\n const {searchTerm} = action\n draftState.searchTerm = searchTerm\n\n return\n }\n }\n })\n}\n","// Libraries\nimport {produce} from 'immer'\nimport {get} from 'lodash'\n\n// Actions\nimport {\n SET_CELLS,\n REMOVE_CELL,\n SET_CELL,\n Action,\n} from 'src/cells/actions/creators'\nimport {\n SET_DASHBOARD,\n Action as DashboardAction,\n} from 'src/dashboards/actions/creators'\nimport {SET_VIEWS_AND_CELLS} from 'src/views/actions/creators'\n\n// Types\nimport {Cell, ResourceState, RemoteDataState} from 'src/types'\n\ntype CellsState = ResourceState['cells']\n\nconst initialState = () => ({\n byID: {},\n status: RemoteDataState.NotStarted,\n})\n\nexport const cellsReducer = (\n state: CellsState = initialState(),\n action: Action | DashboardAction\n) =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_DASHBOARD: {\n const {schema, status} = action\n\n draftState.status = status\n\n if (get(schema, ['entities', 'cells'])) {\n draftState.byID = schema.entities.cells\n }\n\n return\n }\n\n case SET_CELLS: {\n const {status, schema} = action\n\n draftState.status = status\n\n if (get(schema, ['entities', 'cells'])) {\n draftState.byID = schema.entities['cells']\n }\n\n return\n }\n\n case SET_VIEWS_AND_CELLS: {\n const {status, cellsArray} = action\n\n cellsArray.forEach(cellSchema => {\n draftState.status = status\n\n if (get(cellSchema, ['entities', 'cells'])) {\n draftState.byID = cellSchema.entities['cells']\n }\n })\n\n return\n }\n\n case SET_CELL: {\n const {id, schema, status} = action\n\n const cell: Cell = get(schema, ['entities', 'cells', id])\n const cellExists = !!draftState.byID[id]\n\n if (cell || !cellExists) {\n draftState.byID[id] = {...cell, status}\n } else {\n draftState.byID[id].status = status\n }\n\n return\n }\n\n case REMOVE_CELL: {\n delete draftState.byID[action.id]\n\n return\n }\n }\n })\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {\n REMOVE_VIEW,\n RESET_VIEWS,\n SET_VIEW,\n SET_VIEWS,\n SET_VIEWS_AND_CELLS,\n Action,\n} from 'src/views/actions/creators'\nimport {SET_DASHBOARD} from 'src/dashboards/actions/creators'\nimport {View, RemoteDataState, ResourceState, ResourceType} from 'src/types'\n\n// Helpers\nimport {\n setResource,\n setResourceAtID,\n removeResource,\n} from 'src/resources/reducers/helpers'\n\nexport type ViewsState = ResourceState['views']\n\nconst initialState = (): ViewsState => ({\n status: RemoteDataState.NotStarted,\n byID: {},\n allIDs: [],\n})\n\nconst viewsReducer = (\n state: ViewsState = initialState(),\n action: Action\n): ViewsState =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_DASHBOARD: {\n setResource(draftState, action, ResourceType.Views)\n }\n\n case SET_VIEWS: {\n setResource(draftState, action, ResourceType.Views)\n\n return\n }\n case SET_VIEWS_AND_CELLS: {\n const {viewsArray} = action\n viewsArray.forEach(view => {\n setResource(draftState, view, ResourceType.Views)\n })\n\n return\n }\n case SET_VIEW: {\n setResourceAtID(draftState, action, ResourceType.Views)\n\n return\n }\n case RESET_VIEWS: {\n return initialState()\n }\n case REMOVE_VIEW: {\n removeResource(draftState, action)\n\n return\n }\n }\n })\n\nexport default viewsReducer\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {\n SET_ORGS,\n SET_ORG,\n ADD_ORG,\n REMOVE_ORG,\n Action,\n EDIT_ORG,\n} from 'src/organizations/actions/creators'\nimport {\n ResourceState,\n Organization,\n ResourceType,\n RemoteDataState,\n} from 'src/types'\n\n// Utils\nimport {\n setResource,\n addResource,\n removeResource,\n editResource,\n} from 'src/resources/reducers/helpers'\n\nconst {Orgs} = ResourceType\ntype OrgsState = ResourceState['orgs']\n\nconst initialState = (): OrgsState => ({\n byID: {},\n allIDs: [],\n status: RemoteDataState.NotStarted,\n org: null,\n})\n\nexport const orgsReducer = (\n state: OrgsState = initialState(),\n action: Action\n) =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_ORGS: {\n setResource(draftState, action, Orgs)\n\n return\n }\n case ADD_ORG: {\n addResource(draftState, action, Orgs)\n\n return\n }\n\n case REMOVE_ORG: {\n removeResource(draftState, action)\n\n return\n }\n\n case EDIT_ORG: {\n editResource(draftState, action, Orgs)\n\n // NOTE: this is a normalization issue because the current org\n // is being updated, but the selected org object isn't being\n // updated. Since we have only one org at a time in this app\n // i've taken some liberties here\n if (action.schema.result === draftState.org.id) {\n draftState.org = action.schema.entities.orgs[action.schema.result]\n }\n\n return\n }\n\n case SET_ORG: {\n draftState.org = action.org\n\n return\n }\n }\n })\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {ActionTypes, Actions} from 'src/overlays/actions/overlays'\nimport {OverlayParams} from 'src/types'\n\nexport type OverlayID =\n | 'add-note'\n | 'edit-note'\n | 'add-master-token'\n | 'access-token'\n | 'access-cloned-token'\n | 'add-custom-token'\n | 'add-token'\n | 'telegraf-config'\n | 'telegraf-output'\n | 'telegraf-instructions'\n | 'telegraf-wizard'\n | 'switch-organizations'\n | 'create-bucket'\n | 'asset-limit'\n | 'rate-limit'\n | 'write-limit'\n | 'create-annotation-stream'\n | 'update-annotation-stream'\n | 'add-annotation'\n | 'edit-annotation'\n | 'toggle-auto-refresh'\n | 'cell-copy-overlay'\n | 'bucket-schema-show'\n | 'create-rule'\n | 'create-secret'\n | 'share-overlay'\n | 'payg-support'\n | 'free-account-support'\n | 'feedback-questions'\n | 'help-bar-confirmation'\n | 'subscription-replace-certificate'\n\nexport interface OverlayState {\n id: OverlayID | null\n params: OverlayParams\n onClose: () => void\n}\n\nconst nullParams = {}\n\nconst defaultState: OverlayState = {\n id: null,\n params: nullParams,\n onClose: () => {},\n}\n\nexport const overlaysReducer = (\n state = defaultState,\n action: Actions\n): OverlayState =>\n produce(state, draftState => {\n switch (action.type) {\n case ActionTypes.ShowOverlay: {\n const {overlayID, overlayParams, onClose} = action.payload\n draftState.id = overlayID\n draftState.params = overlayParams\n draftState.onClose = onClose\n return\n }\n case ActionTypes.DismissOverlay: {\n draftState.id = null\n draftState.params = nullParams\n draftState.onClose = () => {}\n return\n }\n case ActionTypes.SetOverlayParams: {\n const {overlayParams} = action.payload\n draftState.params = overlayParams\n return\n }\n }\n })\n\nexport default overlaysReducer\n","// Constants\nimport {StepStatus} from 'src/clockface/constants/wizard'\n\n// Types\nimport {Action} from 'src/onboarding/actions'\nimport {OnboardingRequest} from 'src/client'\n\nexport interface OnboardingState {\n stepStatuses: StepStatus[]\n setupParams: OnboardingRequest\n orgID: string\n bucketID: string\n}\n\nconst INITIAL_STATE: OnboardingState = {\n stepStatuses: new Array(3).fill(StepStatus.Incomplete),\n setupParams: null,\n orgID: '',\n bucketID: '',\n}\n\nexport default (state = INITIAL_STATE, action: Action): OnboardingState => {\n switch (action.type) {\n case 'SET_SETUP_PARAMS':\n return {...state, setupParams: action.payload.setupParams}\n case 'SET_STEP_STATUS':\n const stepStatuses = [...state.stepStatuses]\n stepStatuses[action.payload.index] = action.payload.status\n return {...state, stepStatuses}\n case 'SET_ORG_ID':\n return {...state, orgID: action.payload.orgID}\n case 'SET_ONBOARDING_BUCKET_ID':\n return {...state, bucketID: action.payload.bucketID}\n default:\n return state\n }\n}\n","import {Action} from 'src/dashboards/actions/notes'\nimport {NoteEditorMode} from 'src/types/dashboards'\n\nexport interface NoteEditorState {\n mode: NoteEditorMode\n note: string\n showNoteWhenEmpty: boolean\n isPreviewing: boolean\n viewID?: string\n}\n\nconst initialState = (): NoteEditorState => ({\n mode: NoteEditorMode.Adding,\n note: '',\n showNoteWhenEmpty: false,\n isPreviewing: false,\n})\n\nconst noteEditorReducer = (\n state: NoteEditorState = initialState(),\n action: Action\n) => {\n switch (action.type) {\n case 'RESET_NOTE_STATE': {\n return initialState()\n }\n case 'SET_NOTE_STATE': {\n const initialState = action.payload\n\n return {\n ...state,\n ...initialState,\n isPreviewing: false,\n }\n }\n\n case 'CLOSE_NOTE_EDITOR': {\n return {...state, overlayVisible: false}\n }\n\n case 'SET_IS_PREVIEWING': {\n const {isPreviewing} = action.payload\n\n return {...state, isPreviewing}\n }\n\n case 'TOGGLE_SHOW_NOTE_WHEN_EMPTY': {\n const {showNoteWhenEmpty} = state\n\n return {...state, showNoteWhenEmpty: !showNoteWhenEmpty}\n }\n\n case 'SET_NOTE': {\n const {note} = action.payload\n\n return {...state, note}\n }\n }\n\n return state\n}\n\nexport default noteEditorReducer\n","// Libraries\nimport {uniqBy, sortBy, get, isEmpty} from 'lodash'\n\n// Utils\nimport {\n createNewPlugin,\n updateConfigFields,\n isPluginInBundle,\n isPluginUniqueToBundle,\n getConfigFields,\n} from 'src/dataLoaders/utils/pluginConfigs'\nimport {getDeep} from 'src/utils/wrappers'\nimport {validateURI} from 'src/shared/utils/validateURI'\n\n// Types\nimport {Action} from 'src/dataLoaders/actions/dataLoaders'\nimport {\n DataLoaderType,\n DataLoadersState,\n ConfigurationState,\n ConfigFieldType,\n Plugin,\n} from 'src/types/dataLoaders'\nimport {QUICKSTART_SCRAPER_TARGET_URL} from 'src/dataLoaders/constants/pluginConfigs'\n\nexport const INITIAL_STATE: DataLoadersState = {\n telegrafPlugins: [],\n type: DataLoaderType.Empty,\n telegrafConfigID: null,\n pluginBundles: [],\n scraperTarget: {\n bucket: '',\n url: QUICKSTART_SCRAPER_TARGET_URL,\n name: 'Name this Scraper Target',\n },\n telegrafConfigName: 'Name this Configuration',\n telegrafConfigDescription: '',\n token: '',\n locationOnDismiss: '',\n}\n\nexport default (state = INITIAL_STATE, action: Action): DataLoadersState => {\n switch (action.type) {\n case 'CLEAR_DATA_LOADERS':\n return {...INITIAL_STATE}\n case 'SET_DATA_LOADERS_TYPE':\n return {\n ...state,\n type: action.payload.type,\n }\n case 'SET_TELEGRAF_CONFIG_ID':\n return {\n ...state,\n telegrafConfigID: action.payload.id,\n }\n case 'ADD_PLUGIN_BUNDLE':\n return {\n ...state,\n pluginBundles: [...state.pluginBundles, action.payload.bundle],\n }\n case 'REMOVE_PLUGIN_BUNDLE':\n return {\n ...state,\n pluginBundles: state.pluginBundles.filter(\n b => b !== action.payload.bundle\n ),\n }\n case 'REMOVE_BUNDLE_PLUGINS':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.filter(tp => {\n if (isPluginInBundle(tp.name, action.payload.bundle)) {\n return !isPluginUniqueToBundle(\n tp.name,\n action.payload.bundle,\n state.pluginBundles\n )\n }\n\n return true\n }),\n }\n case 'ADD_TELEGRAF_PLUGINS':\n return {\n ...state,\n telegrafPlugins: sortBy(\n uniqBy(\n [...state.telegrafPlugins, ...action.payload.telegrafPlugins],\n 'name'\n ),\n ['name']\n ),\n }\n\n case 'REPLACE_BUNDLE_WITH_PLUGIN':\n const telegrafPlugins = [action.payload.telegrafPlugins]\n return {\n ...state,\n telegrafPlugins,\n }\n\n case 'UPDATE_TELEGRAF_PLUGIN':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.plugin.name) {\n return {\n ...tp,\n plugin: action.payload.plugin,\n }\n }\n\n return tp\n }),\n }\n case 'UPDATE_TELEGRAF_PLUGIN_CONFIG':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.name) {\n const plugin = get(tp, 'plugin', createNewPlugin(tp))\n\n return {\n ...tp,\n plugin: updateConfigFields(\n plugin,\n action.payload.field,\n action.payload.value\n ),\n }\n }\n return tp\n }),\n }\n case 'ADD_TELEGRAF_PLUGIN_CONFIG_VALUE':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.pluginName) {\n const plugin = get(tp, 'plugin', createNewPlugin(tp))\n\n const config = get(plugin, ['config', action.payload.fieldName], [])\n\n const updatedConfigFieldValue: string[] = [\n ...config,\n action.payload.value,\n ]\n\n return {\n ...tp,\n plugin: updateConfigFields(\n plugin,\n action.payload.fieldName,\n updatedConfigFieldValue\n ),\n }\n }\n return tp\n }),\n }\n case 'REMOVE_TELEGRAF_PLUGIN_CONFIG_VALUE':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.pluginName) {\n const plugin = get(tp, 'plugin', createNewPlugin(tp))\n\n const configFieldValues = get(\n plugin,\n `config.${action.payload.fieldName}`,\n []\n )\n const filteredConfigFieldValue = configFieldValues.filter(\n v => v !== action.payload.value\n )\n\n return {\n ...tp,\n plugin: updateConfigFields(\n plugin,\n action.payload.fieldName,\n filteredConfigFieldValue\n ),\n }\n }\n return tp\n }),\n }\n case 'SET_TELEGRAF_PLUGIN_CONFIG_VALUE':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.pluginName) {\n const plugin = get(tp, 'plugin', createNewPlugin(tp))\n const configValues = get(\n plugin,\n `config.${action.payload.field}`,\n []\n )\n configValues[action.payload.valueIndex] = action.payload.value\n return {\n ...tp,\n plugin: updateConfigFields(plugin, action.payload.field, [\n ...configValues,\n ]),\n }\n }\n return tp\n }),\n }\n case 'SET_ACTIVE_TELEGRAF_PLUGIN':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n if (tp.name === action.payload.telegrafPlugin) {\n return {...tp, active: true}\n }\n return {...tp, active: false}\n }),\n }\n case 'SET_PLUGIN_CONFIGURATION_STATE':\n return {\n ...state,\n telegrafPlugins: state.telegrafPlugins.map(tp => {\n const name = get(tp, 'name')\n if (name === action.payload.telegrafPlugin) {\n const configFields = getConfigFields(name)\n if (!configFields) {\n return {...tp, configured: ConfigurationState.Configured}\n }\n\n const plugin = getDeep(tp, 'plugin', createNewPlugin(tp))\n const config = get(plugin, 'config', {})\n\n let isValidConfig = true\n\n Object.entries(configFields).forEach(\n ([fieldName, {type: fieldType, isRequired}]) => {\n if (isRequired) {\n const fieldValue = config[fieldName]\n\n switch (fieldType) {\n case ConfigFieldType.Uri:\n isValidConfig = validateURI(fieldValue as string)\n break\n case ConfigFieldType.String:\n isValidConfig = (fieldValue as string) !== ''\n break\n case ConfigFieldType.StringArray:\n isValidConfig = !!(fieldValue as string[]).length\n break\n case ConfigFieldType.UriArray:\n isValidConfig =\n !!(fieldValue as string[]).length &&\n !fieldValue.find(uri => !validateURI(uri))\n break\n }\n }\n }\n )\n\n if (!isValidConfig || isEmpty(config)) {\n return {\n ...tp,\n configured: ConfigurationState.InvalidConfiguration,\n }\n } else {\n return {...tp, configured: ConfigurationState.Configured}\n }\n }\n\n return {...tp}\n }),\n }\n case 'SET_TELEGRAF_CONFIG_NAME':\n return {\n ...state,\n telegrafConfigName: action.payload.name,\n }\n case 'SET_TELEGRAF_CONFIG_DESCRIPTION':\n return {\n ...state,\n telegrafConfigDescription: action.payload.description,\n }\n case 'SET_SCRAPER_TARGET_NAME':\n const {name} = action.payload\n return {\n ...state,\n scraperTarget: {...state.scraperTarget, name},\n }\n case 'SET_SCRAPER_TARGET_BUCKET':\n const {bucket} = action.payload\n return {\n ...state,\n scraperTarget: {...state.scraperTarget, bucket},\n }\n case 'SET_SCRAPER_TARGET_URL':\n const {url} = action.payload\n return {\n ...state,\n scraperTarget: {\n ...state.scraperTarget,\n url,\n },\n }\n case 'SET_SCRAPER_TARGET_ID':\n const {id} = action.payload\n return {\n ...state,\n scraperTarget: {\n ...state.scraperTarget,\n id,\n },\n }\n case 'SET_TOKEN':\n return {\n ...state,\n token: action.payload.token,\n }\n\n case 'SET_LOCATION_ON_DISMISS':\n return {\n ...state,\n locationOnDismiss: action.payload.locationOnDismiss,\n }\n default:\n return state\n }\n}\n","// Types\nimport {Action} from 'src/dataLoaders/actions/steps'\nimport {Substep} from 'src/types/dataLoaders'\n\nexport interface DataLoadersStepsState {\n currentStep: number\n substep?: Substep\n orgID: string\n bucketID: string\n org: string\n bucket: string\n}\n\nconst INITIAL_STATE: DataLoadersStepsState = {\n org: '',\n bucket: '',\n orgID: '',\n bucketID: '',\n currentStep: 0,\n}\n\nexport default (\n state = INITIAL_STATE,\n action: Action\n): DataLoadersStepsState => {\n switch (action.type) {\n case 'CLEAR_STEPS':\n return {...INITIAL_STATE}\n case 'INCREMENT_CURRENT_STEP_INDEX':\n return {...state, currentStep: state.currentStep + 1}\n case 'DECREMENT_CURRENT_STEP_INDEX':\n return {...state, currentStep: state.currentStep - 1}\n case 'SET_CURRENT_STEP_INDEX':\n return {...state, currentStep: action.payload.index}\n case 'SET_SUBSTEP_INDEX':\n return {\n ...state,\n currentStep: action.payload.stepIndex,\n substep: action.payload.substep,\n }\n case 'SET_BUCKET_INFO':\n return {...state, ...action.payload}\n case 'SET_BUCKET_ID':\n return {...state, bucketID: action.payload.bucketID}\n default:\n return state\n }\n}\n","// Libraries\nimport {combineReducers} from 'redux'\n\n// Reducers\nimport dataLoadersReducer from 'src/dataLoaders/reducers/dataLoaders'\nimport {DataLoadersState} from 'src/types/dataLoaders'\nimport stepsReducer, {\n DataLoadersStepsState,\n} from 'src/dataLoaders/reducers/steps'\n\nexport interface DataLoadingState {\n steps: DataLoadersStepsState\n dataLoaders: DataLoadersState\n}\n\nexport default combineReducers({\n steps: stepsReducer,\n dataLoaders: dataLoadersReducer,\n})\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {VariableEditorState} from 'src/types'\nimport {\n EditorAction,\n CLEAR_VARIABLE_EDITOR,\n CHANGE_VARIABLE_EDITOR_TYPE,\n UPDATE_VARIABLE_EDITOR_NAME,\n UPDATE_VARIABLE_EDITOR_QUERY,\n UPDATE_VARIABLE_EDITOR_MAP,\n UPDATE_VARIABLE_EDITOR_CONSTANT,\n} from 'src/variables/actions/creators'\n\nexport const initialEditorState = (): VariableEditorState => ({\n name: '',\n selected: 'query',\n argsQuery: null,\n argsMap: null,\n argsConstant: null,\n})\n\nexport const variableEditorReducer = (\n state: VariableEditorState = initialEditorState(),\n action: EditorAction\n): VariableEditorState =>\n produce(state, draftState => {\n switch (action.type) {\n case CLEAR_VARIABLE_EDITOR: {\n return initialEditorState()\n }\n case CHANGE_VARIABLE_EDITOR_TYPE: {\n draftState.selected = action.editorType\n return\n }\n case UPDATE_VARIABLE_EDITOR_NAME: {\n draftState.name = action.name\n return\n }\n case UPDATE_VARIABLE_EDITOR_QUERY: {\n draftState.argsQuery = action.payload\n return\n }\n case UPDATE_VARIABLE_EDITOR_MAP: {\n draftState.argsMap = action.payload\n return\n }\n case UPDATE_VARIABLE_EDITOR_CONSTANT: {\n draftState.argsConstant = action.payload\n return\n }\n default:\n return\n }\n })\n","// Libraries\nimport {produce} from 'immer'\nimport {get} from 'lodash'\n\n// Types\nimport {\n Variable,\n RemoteDataState,\n VariablesState,\n ResourceType,\n} from 'src/types'\nimport {\n Action,\n SET_VARIABLES,\n SET_VARIABLE,\n REMOVE_VARIABLE,\n MOVE_VARIABLE,\n SELECT_VARIABLE_VALUE,\n} from 'src/variables/actions/creators'\n\n// Utils\nimport {setResource, removeResource} from 'src/resources/reducers/helpers'\n\nexport const initialState = (): VariablesState => ({\n status: RemoteDataState.NotStarted,\n byID: {},\n allIDs: [],\n values: {},\n})\n\nexport const variablesReducer = (\n state: VariablesState = initialState(),\n action: Action\n): VariablesState =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_VARIABLES: {\n setResource(draftState, action, ResourceType.Variables)\n\n return\n }\n\n case SET_VARIABLE: {\n const {id, status, schema} = action\n\n const variable = get(schema, ['entities', 'variables', id])\n const variableExists = !!draftState.byID[id]\n\n if (variable) {\n draftState.byID[id] = {...variable, status}\n\n if (!variableExists) {\n draftState.allIDs.push(id)\n }\n } else {\n draftState.byID[id].status = status\n }\n\n return\n }\n\n case REMOVE_VARIABLE: {\n removeResource(draftState, action)\n\n return\n }\n\n case SELECT_VARIABLE_VALUE: {\n const {contextID, variableID, selectedValue} = action\n\n if (!draftState.values[contextID]) {\n draftState.values[contextID] = {\n status: RemoteDataState.Done,\n order: draftState.allIDs,\n values: {},\n }\n }\n\n if (!draftState.values[contextID].values[variableID]) {\n draftState.values[contextID].values[variableID] = {\n selected: [selectedValue],\n }\n\n return\n }\n\n draftState.values[contextID].values[variableID].selected = [\n selectedValue,\n ]\n\n return\n }\n\n case MOVE_VARIABLE: {\n const {contextID, newVariableOrder} = action\n\n draftState.values[contextID] = {\n ...(draftState.values[contextID] || {\n status: RemoteDataState.NotStarted,\n values: {},\n }),\n order: newVariableOrder,\n }\n\n return\n }\n }\n })\n\nexport {variableEditorReducer} from 'src/variables/reducers/editor'\n","// Libraries\nimport {produce} from 'immer'\n\n// Types\nimport {RemoteDataState, ResourceState, Label, ResourceType} from 'src/types'\nimport {\n Action,\n SET_LABELS,\n SET_LABEL,\n REMOVE_LABEL,\n} from 'src/labels/actions/creators'\n\n// Utils\nimport {\n setResource,\n setResourceAtID,\n removeResource,\n} from 'src/resources/reducers/helpers'\n\ntype LabelsState = ResourceState['labels']\n\nexport const initialState = (): LabelsState => ({\n status: RemoteDataState.NotStarted,\n byID: {},\n allIDs: [],\n})\n\nexport const labelsReducer = (\n state: LabelsState = initialState(),\n action: Action\n): LabelsState =>\n produce(state, draftState => {\n switch (action.type) {\n case SET_LABELS: {\n setResource