web-interface.assets.bb8c8232-4752.77d643179b480a221a32.js.map Maven / Gradle / Ivy
{"version":3,"file":"bb8c8232-4752.77d643179b480a221a32.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/PageNavigation.tsx","webpack://graylog-web-interface/./src/components/datanode/DataNodeConfiguration/CertificateRenewalPolicyConfig.tsx","webpack://graylog-web-interface/./src/components/datanode/DataNodePageNavigation.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useDataNodes.ts","webpack://graylog-web-interface/./src/components/datanode/hooks/useMigrationState.ts","webpack://graylog-web-interface/./src/components/datanode/hooks/useDataNodesCA.ts","webpack://graylog-web-interface/./src/components/datanode/DataNodeConfiguration/CACreateForm.tsx","webpack://graylog-web-interface/./src/preflight/util/IsSecureConnection.ts","webpack://graylog-web-interface/./src/preflight/components/ConfigurationWizard/UnsecureConnectionAlert.tsx","webpack://graylog-web-interface/./src/components/datanode/DataNodeConfiguration/CAUpload.tsx","webpack://graylog-web-interface/./src/components/datanode/DataNodeConfiguration/CAConfiguration.tsx","webpack://graylog-web-interface/./src/components/datanode/Constants.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/common/MigrationStepTriggerButtonToolbar.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/common/MigrationError.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/CAStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/MigrationDatanodeList.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/common/InPlaceMigrationInfo.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/MigrationWelcomeStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/in-place/JournalSizeWarning.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/in-place/Welcome.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/common/CertificatesProvisioning.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useJournalDowntimeSize.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/in-place/JournalDowntimeWarning.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/in-place/StopMessageProcessing.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useCompatibilityCheck.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/CompatibilityStatus.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/CompatibilityCheckStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/in-place/RestartGraylog.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/InPlaceMigration.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useTriggerMigrationState.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/remoteReindexing/Welcome.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/remoteReindexing/ExistingDataMigrationQuestion.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useRemoteReindexMigrationStatus.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/remoteReindexing/RemoteReindexRunning.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/remoteReindexing/MigrateExistingData.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/remoteReindexing/ShutdownClusterStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/RemoteReindexingMigration.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/ManualMigrationStep.tsx","webpack://graylog-web-interface/./src/components/datanode/hooks/useMigrationWizardStep.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/CertificateRenewalStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/MigrationFinishedStep.tsx","webpack://graylog-web-interface/./src/components/datanode/migrations/MigrationWizard.tsx","webpack://graylog-web-interface/./src/preflight/hooks/useDataNodesCA.ts","webpack://graylog-web-interface/./src/components/datanode/migrations/common/ResetMigrationButton.tsx","webpack://graylog-web-interface/./src/pages/DataNodesMigrationPage.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Badge.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Button.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Col.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Dropzone.tsx","webpack://graylog-web-interface/./src/preflight/components/common/TextInput.tsx","webpack://graylog-web-interface/./src/preflight/components/common/FormikTextInput.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Grid.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Input.tsx","webpack://graylog-web-interface/./src/preflight/components/common/List.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Row.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Section.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Select.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Space.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Tabs.tsx","webpack://graylog-web-interface/./src/preflight/components/common/Title.tsx"],"sourcesContent":["/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { LinkContainer } from 'components/common/router';\nimport { IfPermitted } from 'components/common';\nimport NavItemStateIndicator, {\n hoverIndicatorStyles,\n activeIndicatorStyles,\n} from 'components/common/NavItemStateIndicator';\n\nconst Container = styled(ButtonToolbar)`\n margin-bottom: 10px;\n`;\n\nconst StyledButton = styled(Button)(({ theme }) => css`\n font-family: ${theme.fonts.family.navigation};\n font-size: ${theme.fonts.size.navigation};\n color: ${theme.colors.variant.darker.default};\n \n &:hover,\n &:focus {\n background: inherit;\n text-decoration: none;\n }\n\n &:hover {\n color: inherit;\n ${hoverIndicatorStyles(theme)}\n }\n\n &.active {\n color: ${theme.colors.global.textDefault};\n\n ${activeIndicatorStyles(theme)}\n\n &:hover,\n &:focus {\n ${activeIndicatorStyles(theme)}\n }\n`);\n\nStyledButton.displayName = 'Button';\n\ntype Props = {\n /**\n * List of nav items. Define permissions, if the item should only be displayed for users with specific permissions.\n * By default, an item is active if the current URL starts with the item URL.\n * If you only want to display an item as active only when its path matches exactly, set `exactPathMatch` to true.\n */\n items: Array<{\n title: string,\n path: string,\n permissions?: string | Array\n exactPathMatch?: boolean,\n }>\n}\n\n/**\n * Simple tab navigation to allow navigating to subareas of a page.\n */\nconst PageNavigation = ({ items }: Props) => (\n \n {items.map(({ path, title, permissions, exactPathMatch }) => {\n if (!path) {\n return null;\n }\n\n return (\n \n \n \n \n {title}\n \n \n \n \n );\n })}\n \n);\n\nexport default PageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useMemo, useState } from 'react';\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Field, Form, Formik } from 'formik';\nimport type { DefaultTheme } from 'styled-components';\nimport styled, { css } from 'styled-components';\nimport capitalize from 'lodash/capitalize';\nimport moment from 'moment';\n\nimport ModalSubmit from 'components/common/ModalSubmit';\nimport UserNotification from 'util/UserNotification';\nimport { Input, Button, Col, Modal, Row } from 'components/bootstrap';\nimport { ConfigurationsActions } from 'stores/configurations/ConfigurationsStore';\nimport { ConfigurationType } from 'components/configurations/ConfigurationTypes';\nimport { IfPermitted, TimeUnitInput, Spinner } from 'components/common';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport Select from 'components/common/Select';\nimport useLocation from 'routing/useLocation';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';\nimport { MIGRATION_STATE_QUERY_KEY } from 'components/datanode/hooks/useMigrationState';\n\ntype RenewalPolicy = {\n mode: 'AUTOMATIC' | 'MANUAL',\n certificate_lifetime: string,\n}\nconst TIME_UNITS = ['hours', 'days', 'months', 'years'] as const;\nconst TIME_UNITS_UPPER = TIME_UNITS.map((unit) => unit.toLocaleUpperCase());\n\ntype FormConfig = {\n mode: RenewalPolicy['mode'],\n lifetimeUnit: typeof TIME_UNITS[number],\n lifetimeValue: number,\n}\n\nconst StyledDefList = styled.dl.attrs({\n className: 'deflist',\n})(({ theme }: { theme: DefaultTheme }) => css`\n &&.deflist {\n dt {\n float: left;\n }\n\n dd {\n padding-left: ${theme.spacings.md};\n margin-left: 200px;\n }\n }\n`);\n\nconst handleSaveConfig = async (configToSave: RenewalPolicy) => (\n ConfigurationsActions.update(ConfigurationType.CERTIFICATE_RENEWAL_POLICY_CONFIG, configToSave)\n);\n\nconst smallestUnit = (duration: string) => {\n if (duration.endsWith('H')) {\n return 'hours';\n }\n\n if (duration.endsWith('D')) {\n return 'days';\n }\n\n if (duration.endsWith('M')) {\n return 'months';\n }\n\n if (duration.endsWith('Y')) {\n return 'years';\n }\n\n throw new Error(`Invalid duration specified: ${duration}`);\n};\n\nconst fetchCurrentConfig = () => ConfigurationsActions.list(ConfigurationType.CERTIFICATE_RENEWAL_POLICY_CONFIG) as Promise;\n\nconst NoExistingPolicy = ({ createPolicy }: { createPolicy: () => void }) => (\n There is no Certificate Renewal Policy yet. Click \n to create one.\n \n);\n\nconst certicateRenewalModes = ['AUTOMATIC', 'MANUAL'].map((mode) => ({ label: capitalize(mode), value: mode }));\n\nconst DEFAULT_CONFIG = {\n mode: 'AUTOMATIC',\n lifetimeUnit: 'days',\n lifetimeValue: 30,\n} as const;\n\nconst queryKey = ['config', 'certificate-renewal-policy'];\n\nconst renewalModeExplanation = 'Setting the renewal policy to \"Automatic\" will '\n + 'renew all expiring certificates without any user interaction. Setting it to \"Manual\" will create a system '\n + 'notification when one or more certificates are about to expire, allowing you to confirm their renewal.';\nconst lifetimeExplanation = 'The certificate lifetime will be used for the length of the validity of newly created certificates.';\n\ntype Props = {\n className?: string\n}\n\nconst CertificateRenewalPolicyConfig = ({ className }: Props) => {\n const [showModal, setShowModal] = useState(false);\n const { data: currentConfig, isLoading } = useQuery(queryKey, fetchCurrentConfig);\n\n const sendTelemetry = useSendTelemetry();\n const { pathname } = useLocation();\n const queryClient = useQueryClient();\n\n const { mutateAsync: updateConfig } = useMutation(handleSaveConfig, {\n onSuccess: () => {\n queryClient.invalidateQueries(queryKey);\n queryClient.invalidateQueries(MIGRATION_STATE_QUERY_KEY);\n setShowModal(false);\n },\n onError: (err: Error) => {\n UserNotification.error(`Error Updating Detector Definition: ${err.toString()}`, 'Unable to update detector definition');\n },\n });\n\n const formConfig: FormConfig | undefined = useMemo(() => {\n if (isLoading) {\n return undefined;\n }\n\n if (!currentConfig) {\n return DEFAULT_CONFIG;\n }\n\n const { mode, certificate_lifetime } = currentConfig;\n const lifetimeUnit = smallestUnit(certificate_lifetime);\n const lifetimeValue = moment.duration(certificate_lifetime).as(lifetimeUnit);\n\n return {\n mode,\n lifetimeUnit,\n lifetimeValue,\n };\n }, [currentConfig, isLoading]);\n\n if (isLoading) {\n return ;\n }\n\n const modalTitle = 'Configure Certificate Renewal Policy';\n\n const resetConfig = () => {\n setShowModal(false);\n };\n\n const saveConfig = (values: FormConfig) => {\n sendTelemetry(TELEMETRY_EVENT_TYPE.CONFIGURATIONS.CERTIFICATE_RENEWAL_POLICY_UPDATED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'certificate-renewal-policy',\n app_action_value: 'configuration-save',\n });\n\n const newConfig = {\n mode: values.mode,\n certificate_lifetime: moment.duration(values.lifetimeValue, values.lifetimeUnit).toJSON(),\n };\n\n return updateConfig(newConfig);\n };\n\n return (\n \n Certificate Renewal Policy Configuration
\n \n These settings will be used when detecting expiration of certificates and/or when renewing them.\n
\n {!currentConfig ? setShowModal(true)} /> : (\n <>\n \n Renewal Mode: \n {capitalize(currentConfig.mode)} \n {renewalModeExplanation} \n Certificate Lifetime: \n {formConfig.lifetimeValue} {formConfig.lifetimeUnit} \n {lifetimeExplanation} \n \n\n \n \n \n \n
\n >\n )}\n\n \n onSubmit={saveConfig} initialValues={formConfig}>\n {({ values, setFieldValue, isSubmitting, isValid, isValidating }) => (\n \n )}\n \n \n \n );\n};\n\nCertificateRenewalPolicyConfig.defaultProps = {\n className: undefined,\n};\n\nexport default CertificateRenewalPolicyConfig;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport AppConfig from 'util/AppConfig';\nimport PageNavigation from 'components/common/PageNavigation';\nimport Routes from 'routing/Routes';\nimport { Row } from 'components/bootstrap';\n\nconst enableDataNodeMigration = AppConfig.isFeatureEnabled('data_node_migration');\n\nconst NAV_ITEMS = [\n { title: 'Data Nodes', path: Routes.SYSTEM.DATANODES.LIST, exactPathMatch: true },\n { title: 'Cluster Management', path: Routes.SYSTEM.DATANODES.CLUSTER },\n { title: 'Configuration', path: Routes.SYSTEM.DATANODES.CONFIGURATION },\n enableDataNodeMigration && { title: 'Migration', path: Routes.SYSTEM.DATANODES.MIGRATION },\n];\n\nconst DataNodesPageNavigation = () => (\n \n \n
\n);\n\nexport default DataNodesPageNavigation;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useQuery } from '@tanstack/react-query';\n\nimport { qualifyUrl } from 'util/URLUtils';\nimport PaginationURL from 'util/PaginationURL';\nimport UserNotification from 'util/UserNotification';\nimport fetch from 'logic/rest/FetchProvider';\nimport type { Attribute, SearchParams, PaginatedResponseType } from 'stores/PaginationTypes';\nimport type FetchError from 'logic/errors/FetchError';\nimport type { DataNodes } from 'components/datanode/Types';\n\nexport const bulkRemoveDataNode = async (entity_ids: string[], selectBackFailedEntities: (entity_ids: string[]) => void) => {\n try {\n const { failures, successfully_performed } = await fetch('POST', qualifyUrl('/datanode/bulk_remove'), { entity_ids });\n\n if (failures?.length) {\n selectBackFailedEntities(failures.map(({ entity_id }) => entity_id));\n }\n\n if (failures?.length === entity_ids.length) {\n UserNotification.error(`Removing Data Node failed with status: ${JSON.stringify(failures)}`, 'Could not remove Data Nodes.');\n }\n\n if (successfully_performed) {\n UserNotification.success(`${successfully_performed} Data Node${successfully_performed > 1 ? 's' : ''} removed successfully.`);\n }\n } catch (errorThrown) {\n UserNotification.error(`Removing Data Node failed with status: ${errorThrown}`, 'Could not remove Data Nodes.');\n }\n};\n\nexport const bulkStartDataNode = async (entity_ids: string[], selectBackFailedEntities: (entity_ids: string[]) => void) => {\n try {\n const { failures, successfully_performed } = await fetch('POST', qualifyUrl('/datanode/bulk_start'), { entity_ids });\n\n if (failures?.length) {\n selectBackFailedEntities(failures.map(({ entity_id }) => entity_id));\n }\n\n if (failures?.length === entity_ids.length) {\n UserNotification.error(`Starting Data Node failed with status: ${JSON.stringify(failures)}`, 'Could not start Data Nodes.');\n }\n\n if (successfully_performed) {\n UserNotification.success(`${successfully_performed} Data Node${successfully_performed > 1 ? 's' : ''} started successfully.`);\n }\n } catch (errorThrown) {\n UserNotification.error(`Starting Data Node failed with status: ${errorThrown}`, 'Could not start Data Nodes.');\n }\n};\n\nexport const bulkStopDataNode = async (entity_ids: string[], selectBackFailedEntities: (entity_ids: string[]) => void) => {\n try {\n const { failures, successfully_performed } = await fetch('POST', qualifyUrl('/datanode/bulk_stop'), { entity_ids });\n\n if (failures?.length) {\n selectBackFailedEntities(failures.map(({ entity_id }) => entity_id));\n }\n\n if (failures?.length === entity_ids.length) {\n UserNotification.error(`Stopping Data Node failed with status: ${JSON.stringify(failures)}`, 'Could not stop Data Nodes.');\n }\n\n if (successfully_performed) {\n UserNotification.success(`${successfully_performed} Data Node${successfully_performed > 1 ? 's' : ''} stopped successfully.`);\n }\n } catch (errorThrown) {\n UserNotification.error(`Stopping Data Node failed with status: ${errorThrown}`, 'Could not stop Data Nodes.');\n }\n};\n\nexport const removeDataNode = async (datanodeId: string) => {\n try {\n await fetch('DELETE', qualifyUrl(`/datanode/${datanodeId}`));\n\n UserNotification.success(`Data Node \"${datanodeId}\" removed successfully.`);\n } catch (errorThrown) {\n UserNotification.error(`Removing Data Node failed with status: ${errorThrown}`, 'Could not remove the Data Node.');\n }\n};\n\nexport const startDataNode = async (datanodeId: string) => {\n try {\n await fetch('POST', qualifyUrl(`/datanode/${datanodeId}/start`));\n\n UserNotification.success(`Data Node \"${datanodeId}\" started successfully.`);\n } catch (errorThrown) {\n UserNotification.error(`Starting Data Node failed with status: ${errorThrown}`, 'Could not start the Data Node.');\n }\n};\n\nexport const stopDataNode = async (datanodeId: string) => {\n try {\n await fetch('POST', qualifyUrl(`/datanode/${datanodeId}/stop`));\n\n UserNotification.success(`Data Node \"${datanodeId}\" stopped successfully.`);\n } catch (errorThrown) {\n UserNotification.error(`Stopping Data Node failed with status: ${errorThrown}`, 'Could not stop the Data Node.');\n }\n};\n\nexport const rejoinDataNode = async (datanodeId: string) => {\n try {\n await fetch('POST', qualifyUrl(`/datanode/${datanodeId}/reset`));\n\n UserNotification.success(`Data Node \"${datanodeId}\" rejoined successfully.`);\n } catch (errorThrown) {\n UserNotification.error(`Rejoining Data Node failed with status: ${errorThrown}`, 'Could not rejoin the Data Node.');\n }\n};\n\ntype Options = {\n enabled: boolean,\n}\n\nexport const renewDatanodeCertificate = (nodeId: string) => fetch('POST', qualifyUrl(`/certrenewal/${nodeId}`))\n .then(() => {\n UserNotification.success('Certificate renewed successfully.');\n })\n .catch((error) => {\n UserNotification.error(`Certificate renewal failed with error: ${error}`);\n });\n\nconst fetchDataNodes = async (params?: Partial) => {\n const url = PaginationURL('/system/cluster/datanodes', params?.page, params?.pageSize, params?.query, { sort: params?.sort?.attributeId, order: params?.sort?.direction });\n\n return fetch('GET', qualifyUrl(url));\n};\n\nexport type DataNodeResponse = {\n elements: DataNodes,\n pagination: PaginatedResponseType,\n attributes: Array\n}\n\nconst useDataNodes = (params: Partial = {\n query: '',\n page: 1,\n pageSize: 0,\n}, { enabled }: Options = { enabled: true }, refetchInterval : number | false = 5000) : {\n data: DataNodeResponse,\n refetch: () => void,\n isInitialLoading: boolean,\n error: FetchError,\n} => {\n const { data, refetch, isInitialLoading, error } = useQuery(\n ['datanodes'],\n () => fetchDataNodes(params),\n {\n onError: (errorThrown) => {\n UserNotification.error(`Loading Data Nodes failed with status: ${errorThrown}`,\n 'Could not load Data Nodes.');\n },\n notifyOnChangeProps: ['data', 'error'],\n refetchInterval,\n enabled,\n },\n );\n\n return ({\n data: data || {\n attributes: [],\n elements: [],\n pagination: {\n query: '',\n page: 1,\n per_page: 0,\n total: 0,\n count: 0,\n },\n },\n refetch,\n isInitialLoading,\n error,\n });\n};\n\nexport default useDataNodes;\n","// @ts-nocheck\n/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useQuery } from '@tanstack/react-query';\n\nimport UserNotification from 'util/UserNotification';\nimport { Migration } from '@graylog/server-api';\nimport type { MigrationState } from 'components/datanode/Types';\n\nexport const MIGRATION_STATE_QUERY_KEY = ['migration-state'];\n\nconst useMigrationState = (refetchInterval : number | false = false) : {\n currentStep: MigrationState,\n isLoading: boolean,\n} => {\n const { data, isLoading } = useQuery(\n MIGRATION_STATE_QUERY_KEY,\n () => Migration.status(),\n {\n onError: (error: Error) => UserNotification.error(error.message),\n retry: 2,\n refetchInterval,\n },\n );\n\n return {\n currentStep: data,\n isLoading,\n };\n};\n\nexport default useMigrationState;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useState } from 'react';\n\nimport type FetchError from 'logic/errors/FetchError';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport type { DataNodesCA } from 'components/datanode/Types';\n\nexport const QUERY_KEY = ['data-nodes', 'ca-status'];\nconst fetchDataNodesCA = (): Promise => (\n fetch('GET', qualifyUrl('ca'), undefined, false)\n);\n\nconst useDataNodesCA = (refetchInterval: number | false = 3000): {\n data: DataNodesCA,\n isFetching: boolean,\n error: FetchError,\n isInitialLoading: boolean\n} => {\n const [metaData, setMetaData] = useState<{\n error: FetchError | null,\n isInitialLoading: boolean,\n }>({\n error: null,\n isInitialLoading: false,\n });\n const {\n data,\n isFetching,\n } = useQuery({\n queryKey: QUERY_KEY,\n queryFn: fetchDataNodesCA,\n initialData: undefined,\n refetchInterval,\n retry: false,\n onError: (newError) => {\n setMetaData({\n error: newError,\n isInitialLoading: false,\n });\n },\n onSuccess: () => {\n setMetaData({\n error: null,\n isInitialLoading: false,\n });\n },\n });\n\n return {\n data,\n isFetching,\n isInitialLoading: metaData.isInitialLoading,\n error: metaData.error,\n };\n};\n\nexport default useDataNodesCA;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport { Formik, Form } from 'formik';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { FormikInput } from 'components/common';\nimport { Button } from 'components/bootstrap';\nimport { QUERY_KEY as DATA_NODES_CA_QUERY_KEY } from 'components/datanode/hooks/useDataNodesCA';\nimport { MIGRATION_STATE_QUERY_KEY } from 'components/datanode/hooks/useMigrationState';\n\ntype FormValues = {\n organization: string\n}\n\nconst createCA = (caData: FormValues) => fetch(\n 'POST',\n qualifyUrl('ca/create'),\n caData,\n false,\n);\n\nconst CaCreateForm = () => {\n const queryClient = useQueryClient();\n\n const { mutateAsync: onCreateCA } = useMutation(createCA, {\n onSuccess: () => {\n UserNotification.success('CA created successfully');\n queryClient.invalidateQueries(DATA_NODES_CA_QUERY_KEY);\n queryClient.invalidateQueries(MIGRATION_STATE_QUERY_KEY);\n },\n onError: (error) => {\n UserNotification.error(`CA creation failed with error: ${error}`);\n },\n });\n const onSubmit = (formValues: FormValues) => onCreateCA(formValues).catch(() => {});\n\n return (\n \n \n Click on the “Create CA” button to quickly create a new certificate authority for your Graylog Data Nodes.\n
\n onSubmit(formValues)}>\n {({ isSubmitting, isValid }) => (\n \n )}\n \n \n );\n};\n\nexport default CaCreateForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nconst isSecureConnection = () => {\n if (window.location.protocol !== 'https:') {\n return 'NO';\n }\n\n if (window.isSecureContext === undefined) {\n return 'MAYBE';\n }\n\n return window.isSecureContext ? 'YES' : 'NO';\n};\n\nexport default isSecureConnection;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport * as React from 'react';\n\nimport Alert from 'components/bootstrap/Alert';\nimport isSecureConnection from 'preflight/util/IsSecureConnection';\n\ntype Props = {\n renderIfSecure?: React.ReactElement\n}\n\nconst UnsecureConnectionAlert = ({ renderIfSecure }: Props) => {\n const connectionIsSecure = isSecureConnection();\n\n if (connectionIsSecure === 'YES') {\n return renderIfSecure ?? null;\n }\n\n return (\n \n {connectionIsSecure === 'NO' && (\n <>\n Your connection is not secure. Please be aware the information will be send to the server unencrypted.\n >\n )}\n {connectionIsSecure === 'MAYBE' && (\n <>\n Your connection may not be secure. Please be aware the information may be send to the server unencrypted.\n >\n )}\n \n );\n};\n\nUnsecureConnectionAlert.defaultProps = {\n renderIfSecure: undefined,\n};\n\nexport default UnsecureConnectionAlert;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { useCallback } from 'react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Formik, Form, Field } from 'formik';\n\nimport { fetchMultiPartFormData } from 'logic/rest/FetchProvider';\nimport UserNotification from 'util/UserNotification';\nimport { FormikInput, Icon } from 'components/common';\nimport { Input, Button, Label } from 'components/bootstrap';\nimport { Dropzone } from 'preflight/components/common';\nimport { qualifyUrl } from 'util/URLUtils';\nimport { QUERY_KEY as DATA_NODES_CA_QUERY_KEY } from 'components/datanode/hooks/useDataNodesCA';\nimport UnsecureConnectionAlert from 'preflight/components/ConfigurationWizard/UnsecureConnectionAlert';\nimport { MIGRATION_STATE_QUERY_KEY } from 'components/datanode/hooks/useMigrationState';\n\ntype FormValues = {\n files?: Array,\n password?: string,\n}\n\nconst CADropzone = styled(Dropzone)`\n height: 120px;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nconst DropzoneInner = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n`;\n\nconst Files = styled.div`\n margin-top: 5px;\n margin-bottom: 5px;\n`;\n\nconst File = styled.div`\n gap: 5px;\n display: flex;\n align-items: center;\n`;\n\nconst DeleteIcon: React.ComponentType<{ name: 'xmark', onClick: () => void }> = styled(Icon)`\n cursor: pointer;\n`;\n\nconst submitUpload = (formValues: FormValues) => {\n const formData = new FormData();\n\n if (formValues.password !== undefined) {\n formData.append('password', formValues.password);\n }\n\n formValues.files.forEach((file) => formData.append('files', file));\n\n return fetchMultiPartFormData(qualifyUrl('ca/upload'), formData, false);\n};\n\nconst validate = (formValues: FormValues) => {\n let errors = {};\n\n if (!formValues.files?.length) {\n errors = { ...errors, files: 'Please upload a file.' };\n }\n\n if (formValues.files?.length > 1) {\n errors = { ...errors, files: 'Please upload only a single file.' };\n }\n\n return errors;\n};\n\nconst Explanation = styled.p`\n margin-bottom: 10px;\n`;\n\nconst CAUpload = () => {\n const queryClient = useQueryClient();\n const onRejectUpload = useCallback(() => {\n UserNotification.error('CA upload failed');\n }, []);\n\n const { mutateAsync: onProcessUpload, isLoading } = useMutation(submitUpload, {\n onSuccess: () => {\n UserNotification.success('CA uploaded successfully');\n queryClient.invalidateQueries(DATA_NODES_CA_QUERY_KEY);\n queryClient.invalidateQueries(MIGRATION_STATE_QUERY_KEY);\n },\n onError: (error) => {\n UserNotification.error(`CA upload failed with error: ${error}`);\n },\n });\n\n const onSubmit = useCallback((formValues: FormValues) => onProcessUpload(formValues).catch(() => {}), [onProcessUpload]);\n\n return (\n initialValues={{}} onSubmit={onSubmit} validate={validate}>\n {({ isSubmitting, isValid }) => (\n \n )}\n \n );\n};\n\nexport default CAUpload;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Tabs, Tab } from 'components/bootstrap';\nimport CACreateForm from 'components/datanode/DataNodeConfiguration/CACreateForm';\nimport CAUpload from 'components/datanode/DataNodeConfiguration/CAUpload';\n\nconst TAB_KEYS = ['create', 'upload'];\nconst CAConfiguration = () => (\n <>\n Configure Certificate Authority
\n \n In this step you can either upload or create a new certificate authority.
\n The certificate authority will provision and manage certificates for your Data Nodes more easily.\n
\n \n \n \n \n \n \n \n \n >\n);\nexport default CAConfiguration;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nexport const MIGRATION_STEP = {\n CA_CONFIGURATION: {\n key: 'CA_CONFIGURATION',\n description: 'Configure a certificate authority',\n },\n RENEWAL_POLICY_CONFIGURATION: {\n key: 'RENEWAL_POLICY_CONFIGURATION',\n description: 'Configure a renewal policy',\n },\n COMPATIBILITY_CHECK: {\n key: 'COMPATIBILITY_CHECK',\n description: 'Check OpenSearch compatibility with datanode',\n },\n MANUAL_MIGRATION_STEP: {\n key: 'MANUAL_MIGRATION_STEP',\n description: 'Migration steps.',\n },\n MIGRATION_FINISHED: {\n key: 'MIGRATION_FINISHED',\n description: 'Migration finished',\n },\n} as const;\n\nexport const MIGRATION_STATE = {\n NEW: {\n key: 'NEW',\n description: 'Migration',\n },\n MIGRATION_WELCOME_PAGE: {\n key: 'MIGRATION_WELCOME_PAGE',\n description: 'Welcome',\n },\n CA_CREATION_PAGE: {\n key: 'CA_CREATION_PAGE',\n description: 'Certificate authority',\n },\n RENEWAL_POLICY_CREATION_PAGE: {\n key: 'RENEWAL_POLICY_CREATION_PAGE',\n description: 'Certificate renewal policy',\n },\n MIGRATION_SELECTION_PAGE: {\n key: 'MIGRATION_SELECTION_PAGE',\n description: 'Migration steps',\n },\n ROLLING_UPGRADE_MIGRATION_WELCOME_PAGE: {\n key: 'ROLLING_UPGRADE_MIGRATION_WELCOME_PAGE',\n description: 'Welcome to In-Place migration',\n },\n ASK_TO_SHUTDOWN_OLD_CLUSTER: {\n key: 'ASK_TO_SHUTDOWN_OLD_CLUSTER',\n description: 'Shut down old cluster',\n },\n MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG: {\n key: 'MANUALLY_REMOVE_OLD_CONNECTION_STRING_FROM_CONFIG',\n description: 'Remove connection string',\n },\n MESSAGE_PROCESSING_STOP: {\n key: 'MESSAGE_PROCESSING_STOP',\n description: 'Stop message processing',\n },\n REPLACE_CLUSTER: {\n key: 'REPLACE_CLUSTER',\n description: 'Replace existing cluster',\n },\n RESTART_GRAYLOG: {\n key: 'RESTART_GRAYLOG',\n description: 'Update configuration file and restart Graylog',\n },\n REMOTE_REINDEX_WELCOME_PAGE: {\n key: 'REMOTE_REINDEX_WELCOME_PAGE',\n description: 'Remote reindexing migration',\n },\n PROVISION_DATANODE_CERTIFICATES_PAGE: {\n key: 'PROVISION_DATANODE_CERTIFICATES_PAGE',\n description: 'Provision Data Node with certificates',\n },\n PROVISION_DATANODE_CERTIFICATES_RUNNING: {\n key: 'PROVISION_DATANODE_CERTIFICATES_RUNNING',\n description: \"Provision the Data Node's certificate.\",\n },\n EXISTING_DATA_MIGRATION_QUESTION_PAGE: {\n key: 'EXISTING_DATA_MIGRATION_QUESTION_PAGE',\n description: 'Migrate existing data question',\n },\n MIGRATE_EXISTING_DATA: {\n key: 'MIGRATE_EXISTING_DATA',\n description: 'Migrate existing data',\n },\n REMOTE_REINDEX_RUNNING: {\n key: 'REMOTE_REINDEX_RUNNING',\n description: 'Remote reindexing migration running',\n },\n DIRECTORY_COMPATIBILITY_CHECK_PAGE: {\n key: 'DIRECTORY_COMPATIBILITY_CHECK_PAGE',\n description: 'Directory compatibility check',\n },\n PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES: {\n key: 'PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES',\n description: 'Certificate provisioning overview',\n },\n PROVISION_ROLLING_UPGRADE_NODES_RUNNING: {\n key: 'PROVISION_ROLLING_UPGRADE_NODES_RUNNING',\n description: \"Provision the Data Node's certificate.\",\n },\n JOURNAL_SIZE_DOWNTIME_WARNING: {\n key: 'JOURNAL_SIZE_DOWNTIME_WARNING',\n description: 'Journal size downtime warning',\n },\n FAILED: {\n key: 'FAILED',\n description: 'Migration failed',\n },\n FINISHED: {\n key: 'FINISHED',\n description: 'Migration finished',\n },\n} as const;\n\nexport const IN_PLACE_MIGRATION_STEPS = [\n MIGRATION_STATE.ROLLING_UPGRADE_MIGRATION_WELCOME_PAGE.key,\n MIGRATION_STATE.DIRECTORY_COMPATIBILITY_CHECK_PAGE.key,\n MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES.key,\n MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_RUNNING.key,\n MIGRATION_STATE.JOURNAL_SIZE_DOWNTIME_WARNING.key,\n MIGRATION_STATE.MESSAGE_PROCESSING_STOP.key,\n MIGRATION_STATE.RESTART_GRAYLOG.key,\n];\nexport const REMOTE_REINDEXING_MIGRATION_STEPS = [\n MIGRATION_STATE.REMOTE_REINDEX_WELCOME_PAGE.key,\n MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_PAGE.key,\n MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_RUNNING.key,\n MIGRATION_STATE.EXISTING_DATA_MIGRATION_QUESTION_PAGE.key,\n MIGRATION_STATE.MIGRATE_EXISTING_DATA.key,\n MIGRATION_STATE.REMOTE_REINDEX_RUNNING.key,\n MIGRATION_STATE.ASK_TO_SHUTDOWN_OLD_CLUSTER.key,\n];\n\nexport const MIGRATION_WIZARD_STEPS = [\n MIGRATION_STATE.NEW.key,\n MIGRATION_STATE.MIGRATION_WELCOME_PAGE.key,\n MIGRATION_STATE.CA_CREATION_PAGE.key,\n MIGRATION_STATE.RENEWAL_POLICY_CREATION_PAGE.key,\n MIGRATION_STATE.MIGRATION_SELECTION_PAGE.key,\n MIGRATION_STATE.FINISHED.key,\n];\n\nexport const MIGRATION_ACTIONS = {\n SHOW_RENEWAL_POLICY_CREATION: {\n key: 'SHOW_RENEWAL_POLICY_CREATION',\n label: 'Configure certificate renewal policy',\n },\n SHOW_MIGRATION_SELECTION: {\n key: 'SHOW_MIGRATION_SELECTION',\n label: 'Go to migration steps',\n },\n RUN_DIRECTORY_COMPATIBILITY_CHECK: {\n key: 'INSTALL_DATANODES_ON_EVERY_NODE',\n label: 'Run directory compatibilty check',\n },\n PROVISION_DATANODE_CERTIFICATES: {\n key: 'PROVISION_DATANODE_CERTIFICATES',\n label: 'Provision Data Nodes with certificates',\n },\n SKIP_EXISTING_DATA_MIGRATION: {\n key: 'SKIP_EXISTING_DATA_MIGRATION',\n label: 'Skip existing data migration',\n },\n RETRY_MIGRATE_EXISTING_DATA: {\n key: 'RETRY_MIGRATE_EXISTING_DATA',\n label: 'Retry migrate existing data',\n },\n CHECK_REMOTE_INDEXER_CONNECTION: {\n key: 'CHECK_REMOTE_INDEXER_CONNECTION',\n label: 'Check connection',\n },\n START_REMOTE_REINDEX_MIGRATION: {\n key: 'START_REMOTE_REINDEX_MIGRATION',\n label: 'Start migration',\n },\n};\nexport default MIGRATION_STEP;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport type { MigrationActions, OnTriggerStepFunction, StepArgs } from 'components/datanode/Types';\nimport { Button, ButtonToolbar } from 'components/bootstrap';\nimport { MIGRATION_ACTIONS } from 'components/datanode/Constants';\n\nconst StyledButtonToolbar = styled(ButtonToolbar)`\n flex-wrap: wrap;\n`;\n\ntype Props = {\n nextSteps?: Array,\n disabled?: boolean,\n onTriggerStep: OnTriggerStepFunction,\n args?: StepArgs,\n hidden?: boolean,\n}\n\nconst MigrationStepTriggerButtonToolbar = ({ nextSteps, disabled, onTriggerStep, args, hidden }: Props) => {\n if (hidden) {\n return null;\n }\n\n return (\n \n {nextSteps.map((step) => )}\n \n );\n};\n\nMigrationStepTriggerButtonToolbar.defaultProps = {\n nextSteps: [],\n disabled: false,\n args: {},\n hidden: false,\n};\n\nexport default MigrationStepTriggerButtonToolbar;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Alert } from 'components/bootstrap';\n\ntype Props = {\n errorMessage: string,\n}\nconst StyledAlert = styled(Alert)`\n margin-top: 10px;\n margin-bottom: 5px;\n`;\n\nconst MigrationError = ({ errorMessage }: Props) => {\n if (!errorMessage) {\n return null;\n }\n\n return (\n \n {errorMessage}\n \n );\n};\n\nexport default MigrationError;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport CAConfiguration from 'components/datanode/DataNodeConfiguration/CAConfiguration';\nimport { Space } from 'preflight/components/common';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\n\nconst CaStep = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n \n \n \n {(currentStep.next_steps.length <= 0) && (Please create a certificate Authority before proceeding.
)}\n \n >\n);\nexport default CaStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Icon, RelativeTime, Spinner } from 'components/common';\nimport { Alert, Table } from 'components/bootstrap';\nimport { DocumentationLink } from 'components/support';\nimport useDataNodes from 'components/datanode/hooks/useDataNodes';\n\ntype Props = {\n showProvisioningState?: boolean\n}\n\nconst StyledIcon = styled(Icon)`\n margin-right: 0.5em;\n`;\n\nconst MigrationDatanodeList = ({ showProvisioningState }: Props) => {\n const { data: dataNodes, isInitialLoading } = useDataNodes();\n\n if (isInitialLoading) {\n return ;\n }\n\n return (\n \n {(!dataNodes || dataNodes?.elements.length === 0) ? (\n <>\n There are no Data Nodes found.
\n \n Please start at least a Data Node to continue the migration process. You can find more information on how to start a Data Nodes in our .\n \n
\n >\n ) : (\n <>\n Data Nodes found: {dataNodes?.elements.length}
\n
\n \n \n \n Hostname \n Transport address \n Status \n Certificate valid until \n \n \n \n {dataNodes.elements.map((datanode) => (\n \n {datanode.hostname} \n {datanode.transport_address} \n {showProvisioningState ? datanode.status : datanode.data_node_status} \n {datanode.cert_valid_until ? : 'No certificate'} \n \n ))}\n \n
\n >\n )}\n \n );\n};\n\nMigrationDatanodeList.defaultProps = {\n showProvisioningState: true,\n};\n\nexport default MigrationDatanodeList;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Panel } from 'components/bootstrap';\n\nexport const StyledPanel = styled(Panel)<{ bsStyle: string }>(({ bsStyle = 'default', theme }) => css`\n &.panel {\n background-color: ${theme.colors.global.contentBackground};\n\n .panel-heading {\n color: ${theme.colors.variant.darker[bsStyle]};\n }\n }\n margin-top: ${theme.spacings.md} !important;\n`);\n\nconst InPlaceMigrationInfo = () => (\n \n \n In-Place migration \n \n \n For In-Place migrations, please ensure the configuration of your Data Nodes in datanode.conf
, specifically the opensearch_data_location
configuration option, points to the correct existing OpenSearch data directory on every node.\n \n \n);\nexport default InPlaceMigrationInfo;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Col, Row, Panel } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport { DocumentationLink } from 'components/support';\nimport MigrationDatanodeList from 'components/datanode/migrations/MigrationDatanodeList';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\nimport InPlaceMigrationInfo from 'components/datanode/migrations/common/InPlaceMigrationInfo';\n\nconst Headline = styled.h2`\n margin-top: 5px;\n margin-bottom: 10px;\n`;\n\nexport const StyledPanel = styled(Panel)<{ bsStyle: string }>(({ bsStyle = 'default', theme }) => css`\n &.panel {\n background-color: ${theme.colors.global.contentBackground};\n\n .panel-heading {\n color: ${theme.colors.variant.darker[bsStyle]};\n }\n }\n`);\n\nconst StyledHelpPanel = styled(StyledPanel)`\n margin-top: 30px;\n`;\n\nconst MigrationWelcomeStep = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n \n \n \n Data Nodes Migration \n \n The Graylog Data Node is a management component designed to configure and optimize OpenSearch for use with Graylog, reducing administrative overhead and simplifying future updates.\n
\n Deployments earlier than v5.2 or that opted to not install with a Data Node will need to migrate the message databases to Data Nodes.
\n \n This migration tool will check the compatibility of your components and guide you through to migrate your existing OpenSearch data to a Data Node.
\n
\n Migrating to Data Node will require some steps to be performed on the OS, within your current OS/ES cluster, and in your configuration files.
\n You can get more information on the Data Node migration .
\n
\n \n \n \n \n \n \n Migrating Elasticsearch 7.10 \n \n \n Migration from Elasticsearch 7.10
needs an additional step. ES 7.10 does not understand JWT\n authentication.\n So you will need to first migrate to OpenSearch before running the update of the security information. Please find more information in our .\n
\n Migrating an OpenSearch Cluster
\n \n Depending on how you secured your existing cluster, some preliminary changes are needed to the security configuration. We use JWT authentication between Graylog and OpenSearch. If you want to perform an In-Place migration of your existing cluster into the Data Node, you have to manually include JWT authentication to your existing OpenSearch cluster prior to running the migration wizard.\n
\n \n Enable JWT authentication in opensearch-security/config.yml
(section jwt_auth_domain
, http_enabled: true
, transport_enabled: true
)\n Add the signing key by converting the GRAYLOG_PASSWORD_SECRET
to base64
e.g. by doing echo `"`The password secret you chose`"` | base64
and put it into the signing_key
line\n
\n Usage of certificates
\n \n If your existing cluster uses certificates, by default these will get replaced with the Graylog CA and automatically generated certificates during provisioning of the Data Nodes. If you have to reuse your own certificates, please read the on how to include your own CA/certificates in Graylog/DataNode\n
\n \n \n \n \n
\n);\n\nexport default MigrationWelcomeStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Icon } from 'components/common';\nimport { Panel } from 'components/bootstrap';\nimport { StyledPanel } from 'components/datanode/migrations/MigrationWelcomeStep';\n\nconst StyledHelpPanel = styled(StyledPanel)`\n margin-top: 30px;\n`;\n\nconst JournalSizeWarning = () => (\n \n \n Journal size warning \n \n \n Please note that during migration you will have to stop processing on your Graylog node, this will result in the journal growing in size.\n Therefore you will have to increase your journal volume size during the Journal size downsize step or earlier.\n
\n \n \n);\n\nexport default JournalSizeWarning;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { Col, Row } from 'components/bootstrap';\nimport { DocumentationLink } from 'components/support';\nimport MigrationDatanodeList from 'components/datanode/migrations/MigrationDatanodeList';\nimport useDataNodes from 'components/datanode/hooks/useDataNodes';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport JournalSizeWarning from 'components/datanode/migrations/in-place/JournalSizeWarning';\nimport InPlaceMigrationInfo from 'components/datanode/migrations/common/InPlaceMigrationInfo';\n\nconst Welcome = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { data: dataNodes } = useDataNodes();\n\n return (\n <>\n \n \n Welcome
\n An In-Place migration will migrate the data folder of your existing cluster to a Data Node cluster.
\n To start please install Data Node on every OS/ES node from your previous setup. You can find more information on how to download and install the Data Node .
\n \n \n \n \n \n \n
\n \n >\n );\n};\n\nexport default Welcome;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport { MIGRATION_STATE } from 'components/datanode/Constants';\nimport { Spinner } from 'components/common';\nimport useMigrationState from 'components/datanode/hooks/useMigrationState';\nimport MigrationDatanodeList from 'components/datanode/migrations/MigrationDatanodeList';\nimport { Alert } from 'components/bootstrap';\n\nconst CertificatesProvisioning = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { currentStep: step, isLoading } = useMigrationState(3000);\n\n if (isLoading) {\n return ;\n }\n\n const isProvisioningOverview = (step.state === MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES.key) || (step.state === MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_PAGE.key);\n const isProvisioningRunning = (step.state === MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_RUNNING.key) || (step.state === MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_RUNNING.key);\n const haveNextStep = step?.next_steps?.length > 0;\n\n return (\n <>\n {isProvisioningOverview && (\n \n Certificate authority has been configured successfully.
\n You can now provision certificate for your Data Nodes.\n
\n )}\n {(isProvisioningRunning && !haveNextStep) && (\n \n )}\n {(isProvisioningRunning && haveNextStep) && (\n Provisioning the Data Node finished. \n )}\n \n
\n \n >\n );\n};\n\nexport default CertificatesProvisioning;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useQuery } from '@tanstack/react-query';\n\nimport { qualifyUrl } from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport fetch from 'logic/rest/FetchProvider';\n\nconst fetchJournalDowntimeSize = async () => fetch('GET', qualifyUrl('/migration/journalestimate'));\n\nconst useJournalDowntimeSize = () : {\n data: number,\n refetch: () => void,\n isInitialLoading: boolean,\n error: any,\n isError: boolean\n} => {\n const { data, refetch, isInitialLoading, error, isError } = useQuery(\n ['JournalDowntimeSize'],\n fetchJournalDowntimeSize,\n {\n onError: (errorThrown) => {\n UserNotification.error(`Loading Data Node migration journal estimate: ${errorThrown}`,\n 'Could not load Data Node journal size estimate');\n },\n notifyOnChangeProps: ['data', 'error'],\n refetchInterval: 5000,\n },\n );\n\n return ({\n data: Math.round((data || 0) / 1024), // KB\n refetch,\n isInitialLoading,\n error,\n isError,\n });\n};\n\nexport default useJournalDowntimeSize;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Alert } from 'components/bootstrap';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\n\nimport useJournalDowntimeSize from '../../hooks/useJournalDowntimeSize';\nimport MigrationError from '../common/MigrationError';\n\nconst DownsizeWarning = styled(Alert)`\n margin-top: 10px;\n margin-bottom: 5px;\n`;\n\nconst JournalDowntimeWarning = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { data, error, isError } = useJournalDowntimeSize();\n\n return (\n <>\n Journal downtime size warning
\n Please note that during migration data processing will stop on your Graylog node, this will result in the journal growing in size.
\n Therefore increase your journal volume size.
\n Your current journal throughput is: {data} KB/min
\n {isError && (\n \n )}\n \n Please make sure your journal volume size is sufficient before proceeding.\n \n \n >\n );\n};\n\nexport default JournalDowntimeWarning;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport { Panel } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport { StyledPanel } from 'components/datanode/migrations/MigrationWelcomeStep';\n\nconst StyledHelpPanel = styled(StyledPanel)`\n margin-top: 30px;\n`;\n\nconst StopMessageProcessing = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n Graylog processing is stopped.
\n \n \n Stop OpenSearch \n \n \n Please stop your OpenSearch cluster before proceeding.
\n If you are migrating existing OpenSearch data by pointing the data node to its data directory, make sure that\n the user running the data node (usually graylog-datanode) has permissions to write to the data directory set\n in the data node configuration.\n
\n \n \n \n \n\n >\n);\n\nexport default StopMessageProcessing;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useQuery } from '@tanstack/react-query';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport type { CompatibilityResponseType } from 'components/datanode/Types';\nimport { qualifyUrl } from 'util/URLUtils';\n\ntype Options = {\n enabled: boolean,\n}\n\nconst fetchCompatibility = async () => {\n const url = 'datanodes/all/rest/indices-directory/compatibility';\n\n return fetch('GET', qualifyUrl(url));\n};\n\nconst useCompatibilityCheck = ({ enabled }: Options = { enabled: true }): {\n data: { [hostname: string]: CompatibilityResponseType },\n error: Error,\n refetch: () => void,\n isInitialLoading: boolean,\n isError: boolean,\n} => {\n const { data, refetch, isInitialLoading, error, isError } = useQuery<{ [hostname: string]: CompatibilityResponseType }, Error>(\n ['datanodes', 'compatibility'],\n () => fetchCompatibility(),\n {\n keepPreviousData: true,\n enabled,\n });\n\n return ({\n data,\n error,\n refetch,\n isInitialLoading,\n isError,\n });\n};\n\nexport default useCompatibilityCheck;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\nimport { useState } from 'react';\n\nimport type { NodeInfo } from 'components/datanode/Types';\nimport { Accordion, AccordionItem, Pluralize, Timestamp } from 'components/common';\nimport { Table } from 'components/bootstrap';\n\ntype Props = {\n hostname: string,\n opensearchVersion: string,\n nodeInfo: {\n nodes: Array,\n opensearch_data_location: string,\n }\n};\n\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: 25% 75%;\n grid-gap: 0.5rem;\n margin-bottom: 1rem;\n`;\n\nconst StyledSpan = styled.span`\n display: block;\n clear: both;\n`;\n\nconst CompatibilityStatus = ({ hostname, opensearchVersion, nodeInfo }: Props) => {\n const { opensearch_data_location: opensearchLocation, nodes } = nodeInfo;\n const [activeAccordion, setActiveAccordion] = useState(`Node: 1, Version: ${nodes[0]?.node_version}, ${nodes[0]?.indices.length} indices`);\n\n const handleSelect = (nextKey: string | undefined) => {\n setActiveAccordion(nextKey ?? activeAccordion);\n };\n\n return (\n \n \n Datanode OpenSearch version: {opensearchVersion} \n OpenSearch data location: {opensearchLocation} \n \n \n \n {nodes.map((node) => (\n \n \n \n \n Indices \n Creation date \n Index version \n Shards \n \n \n \n {node.indices.map((indice) => (\n \n {indice.index_name} \n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n \n {indice.index_version_created} \n {indice.shards.length} \n \n ))}\n \n
\n \n ))}\n \n \n \n );\n};\n\nexport default CompatibilityStatus;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Alert } from 'components/bootstrap';\nimport useCompatibilityCheck from 'components/datanode/hooks/useCompatibilityCheck';\nimport { Spinner } from 'components/common';\nimport CompatibilityStatus from 'components/datanode/migrations/CompatibilityStatus';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\n\nconst CompatibilityAlert = styled(Alert)`\n margin-top: 10px;\n margin-bottom: 5px;\n`;\n\nconst CompatibilityCheckStep = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { error: requestError, data, isInitialLoading, isError } = useCompatibilityCheck();\n\n if (isInitialLoading) {\n return ;\n }\n\n const errors = Object.values(data || {}).flatMap((value) => (value?.compatibility_errors || []));\n const isCompatible = errors.length === 0;\n\n return (\n <>\n Directory compatibility check
\n \n {isCompatible && Your existing OpenSearch data can be migrated to Data Node.
}\n {!isError && !isCompatible && (\n <>\n Your existing OpenSearch data cannot be migrated to Data Node.
\n
\n Error: {errors} {errors.map((error) => {error} )}\n >\n )}\n {isError && (\n <>\n There was an error checking the compatibility
\n {requestError.message}
\n >\n )}\n \n
\n {!isCompatible && (Your OpenSearch cluster cannot be migrated to this Data Node version because it's not compatible.
)}\n {isCompatible && Object.keys(data).map((hostname) => (\n \n ))}\n \n >\n );\n};\n\nCompatibilityCheckStep.defaultProps = {\n canSkip: true,\n};\n\nexport default CompatibilityCheckStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport { Space } from 'preflight/components/common';\nimport MigrationDatanodeList from 'components/datanode/migrations/MigrationDatanodeList';\n\nconst RestartGraylog = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n Almost there!
\n Please remove the elasticsearch_hosts
line from your graylog.conf
\n E.g., elasticsearch_hosts = https://admin:admin@opensearch1:9200,https://admin:admin@opensearch2:9200,https://admin:admin@opensearch3:9200
\n \n \n Please wait for all data nodes to become 'AVAILABLE'. Please check the data node's log if they do\n not become available within 1-2 minutes.\n
\n {/* eslint-disable-next-line react/no-unescaped-entities */}\n Once that's done, please restart Graylog to finish the migration.
\n \n >\n);\n\nexport default RestartGraylog;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Col, Panel, PanelGroup } from 'components/bootstrap';\nimport type {\n MigrationActions,\n StepArgs,\n MigrationStateItem,\n MigrationStepComponentProps,\n} from 'components/datanode/Types';\nimport { IN_PLACE_MIGRATION_STEPS, MIGRATION_STATE } from 'components/datanode/Constants';\nimport Welcome from 'components/datanode/migrations/in-place/Welcome';\nimport CertificatesProvisioning from 'components/datanode/migrations/common/CertificatesProvisioning';\nimport JournalDowntimeWarning from 'components/datanode/migrations/in-place/JournalDowntimeWarning';\nimport StopMessageProcessing from 'components/datanode/migrations/in-place/StopMessageProcessing';\nimport CompatibilityCheckStep from 'components/datanode/migrations/CompatibilityCheckStep';\nimport RestartGraylog from 'components/datanode/migrations/in-place/RestartGraylog';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\n\nconst StyledTitle = styled.h3`\n margin-bottom: 10px;\n\n & > small {\n font-size: 80%;\n }\n`;\n\nconst StyledPanelGroup = styled(PanelGroup)`\n &.panel-group > .panel {\n margin-top: 0;\n border-color: ${(props) => props.theme.colors.input.border};\n background-color: ${(props) => props.theme.colors.global.contentBackground};\n\n .panel-heading {\n background-color: ${(props) => props.theme.colors.table.row.backgroundAlt};\n }\n\n &:not(:first-child) {\n border-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n &:not(:last-child) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n`;\n\nconst InPlaceMigration = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { state: activeStep } = currentStep;\n\n const onStepComplete = async (step: MigrationActions, args: StepArgs = {}) => onTriggerStep(step, args);\n\n const getStepComponent = (step: MigrationStateItem) => {\n switch (step) {\n case MIGRATION_STATE.ROLLING_UPGRADE_MIGRATION_WELCOME_PAGE.key:\n return ;\n case MIGRATION_STATE.DIRECTORY_COMPATIBILITY_CHECK_PAGE.key:\n return ;\n case MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_WITH_CERTIFICATES.key:\n case MIGRATION_STATE.PROVISION_ROLLING_UPGRADE_NODES_RUNNING.key:\n return ;\n case MIGRATION_STATE.JOURNAL_SIZE_DOWNTIME_WARNING.key:\n return ;\n case MIGRATION_STATE.MESSAGE_PROCESSING_STOP.key:\n return ;\n case MIGRATION_STATE.RESTART_GRAYLOG.key:\n return ;\n default:\n return ;\n }\n };\n\n return (\n \n In-Place migration \n Follow these steps to migrate your existing OpenSearch version 2.x or 1.3.x cluster to Data\n Nodes.\n
\n {}}>\n {IN_PLACE_MIGRATION_STEPS.map((inPlaceStep, index) => {\n const { description } = MIGRATION_STATE[inPlaceStep];\n\n return (\n \n \n \n {`${index + 1}. ${description}`} \n \n \n \n \n \n {getStepComponent(inPlaceStep)}\n \n \n \n );\n })}\n\n \n \n );\n};\n\nexport default InPlaceMigration;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport { Migration } from '@graylog/server-api';\nimport { MIGRATION_STATE_QUERY_KEY } from 'components/datanode/hooks/useMigrationState';\nimport UserNotification from 'util/UserNotification';\nimport type { MigrationState, MigrationStepRequest } from 'components/datanode/Types';\n\nconst useTriggerMigrationState = (): {\n onTriggerNextState: (step: MigrationStepRequest) => Promise,\n isLoadingNextMigrationState: boolean,\n isError: boolean,\n error: Error,\n} => {\n const queryClient = useQueryClient();\n const { mutateAsync: onTriggerNextState, isLoading: isLoadingNextMigrationState, error, isError } = useMutation(Migration.trigger, {\n onSuccess: () => {\n queryClient.invalidateQueries(MIGRATION_STATE_QUERY_KEY);\n },\n onError: (err: Error) => UserNotification.error(err.message),\n });\n\n return {\n onTriggerNextState: onTriggerNextState as (step: MigrationStepRequest) => Promise,\n isLoadingNextMigrationState,\n isError,\n error,\n };\n};\n\nexport default useTriggerMigrationState;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { DocumentationLink } from 'components/support';\nimport MigrationDatanodeList from 'components/datanode/migrations/MigrationDatanodeList';\nimport useDataNodes from 'components/datanode/hooks/useDataNodes';\n\nimport MigrationStepTriggerButtonToolbar from '../common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from '../../Types';\n\nconst Welcome = ({ currentStep, onTriggerStep } : MigrationStepComponentProps) => {\n const { data: dataNodes } = useDataNodes();\n\n return (\n <>\n Welcome
\n Using the Remote Reindexing will allow you to move to Data Nodes by reindexing the data in your existing cluster to a Data Node cluster.
\n To start please install Data Node on every OS/ES node from your previous setup. You can find more information on how to download and install the Data Node .
\n \n \n >\n );\n};\n\nexport default Welcome;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { Space } from 'preflight/components/common';\n\nimport type { MigrationStepComponentProps } from '../../Types';\nimport MigrationStepTriggerButtonToolbar from '../common/MigrationStepTriggerButtonToolbar';\n\nconst ExistingDataMigrationQuestion = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n Do you want to migrate your existing data?
\n \n Please remove the elasticsearch_hosts
line from your Graylog configuration file (graylog.conf
).
\n E.g., elasticsearch_hosts = https://admin:admin@opensearch1:9200,https://admin:admin@opensearch2:9200,https://admin:admin@opensearch3:9200
\n \n Once that is done please proceed to the next step.
\n \n \n >\n);\n\nexport default ExistingDataMigrationQuestion;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useState, useEffect } from 'react';\n\nimport type { MigrationActions, MigrationState, OnTriggerStepFunction, StepArgs } from '../Types';\nimport { MIGRATION_STATE } from '../Constants';\n\nexport type MigrationStatus = 'NOT_STARTED'|'STARTING'|'RUNNING'|'ERROR'|'FINISHED';\n\nexport type RemoteReindexIndex = {\n took: string,\n batches: number,\n error_msg: string,\n created: string,\n name: string,\n status: MigrationStatus,\n}\n\nexport type RemoteReindexMigration = {\n indices: RemoteReindexIndex[],\n id: string,\n error: string,\n status: MigrationStatus,\n progress: number,\n}\n\nexport type RemoteReindexRequest = {\n allowlist: string,\n hostname: string,\n password: string,\n indices: string[],\n synchronous: boolean,\n user: string,\n}\n\nexport const RemoteReindexFinishedStatusActions: MigrationActions[] = ['RETRY_MIGRATE_EXISTING_DATA', 'SHOW_ASK_TO_SHUTDOWN_OLD_CLUSTER'];\n\nconst useRemoteReindexMigrationStatus = (\n currentStep: MigrationState,\n onTriggerStep: OnTriggerStepFunction,\n refetchInterval: number = 3000,\n) : {\n nextSteps: MigrationActions[],\n migrationStatus: RemoteReindexMigration,\n handleTriggerStep: OnTriggerStepFunction,\n} => {\n const [nextSteps, setNextSteps] = useState(['RETRY_MIGRATE_EXISTING_DATA']);\n const [migrationStatus, setMigrationStatus] = useState(undefined);\n\n useEffect(() => {\n const fetchCurrentMigrationStatus = async () => {\n if (currentStep?.state === MIGRATION_STATE.REMOTE_REINDEX_RUNNING.key) {\n if (\n migrationStatus?.progress === 100\n && migrationStatus?.status === 'FINISHED'\n ) {\n setNextSteps(currentStep?.next_steps.filter((action) => RemoteReindexFinishedStatusActions.includes(action)));\n } else {\n onTriggerStep('REQUEST_MIGRATION_STATUS').then((data) => {\n const _migrationStatus = data?.response as RemoteReindexMigration;\n\n if (_migrationStatus) {\n setMigrationStatus(_migrationStatus);\n }\n });\n }\n }\n };\n\n const interval = setInterval(() => {\n fetchCurrentMigrationStatus();\n }, refetchInterval);\n\n return () => clearInterval(interval);\n }, [onTriggerStep, migrationStatus, currentStep?.state, currentStep?.next_steps, refetchInterval]);\n\n const handleTriggerStep = (step: MigrationActions, args?: StepArgs) => onTriggerStep(step, args).then((data) => {\n setMigrationStatus(undefined);\n\n return data;\n });\n\n return ({\n nextSteps,\n migrationStatus,\n handleTriggerStep,\n });\n};\n\nexport default useRemoteReindexMigrationStatus;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { ProgressBar } from 'components/common';\nimport { Alert } from 'components/bootstrap';\n\nimport type { MigrationStepComponentProps } from '../../Types';\nimport MigrationStepTriggerButtonToolbar from '../common/MigrationStepTriggerButtonToolbar';\nimport useRemoteReindexMigrationStatus from '../../hooks/useRemoteReindexMigrationStatus';\n\nconst IndicesContainer = styled.div`\n max-height: 100px;\n overflow-y: auto;\n`;\n\nconst RemoteReindexRunning = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { nextSteps, migrationStatus, handleTriggerStep } = useRemoteReindexMigrationStatus(currentStep, onTriggerStep);\n const indicesWithErrors = migrationStatus?.indices.filter((index) => index.status === 'ERROR') || [];\n\n return (\n <>\n We are currently migrating your existing data asynchronically,\n once the data migration is finished you will be automatically transitioned to the next step.\n
\n
\n \n {(indicesWithErrors.length > 0) && (\n \n \n {indicesWithErrors.map((index) => (\n \n {index.name}\n {index.error_msg}
\n \n ))}\n \n \n )}\n \n >\n );\n};\n\nexport default RemoteReindexRunning;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Formik, Form } from 'formik';\nimport type { FormikErrors } from 'formik';\nimport styled from 'styled-components';\n\nimport { Alert, Input } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\n\nimport type { RemoteReindexRequest } from '../../hooks/useRemoteReindexMigrationStatus';\nimport type { MigrationActions, MigrationState, MigrationStepComponentProps, StepArgs } from '../../Types';\nimport MigrationStepTriggerButtonToolbar from '../common/MigrationStepTriggerButtonToolbar';\n\nconst IndicesContainer = styled.div`\n max-height: 300px;\n overflow-y: scroll;\n overflow: -moz-scrollbars-vertical;\n -ms-overflow-y: scroll;\n margin-top: 5px;\n`;\n\nexport type RemoteReindexCheckConnection = {\n indices: string[],\n error: any,\n}\n\nconst MigrateExistingData = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const [nextSteps, setNextSteps] = useState(['CHECK_REMOTE_INDEXER_CONNECTION']);\n const [errorMessage, setErrrorMessage] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [availableIndices, setAvailableIndices] = useState([]);\n const [selectedIndices, setSelectedIndices] = useState([]);\n\n const handleConnectionCheck = (step: MigrationActions, data: MigrationState) => {\n if (step === 'CHECK_REMOTE_INDEXER_CONNECTION') {\n const checkConnectionResult = data?.response as RemoteReindexCheckConnection;\n\n if (checkConnectionResult?.indices?.length) {\n setAvailableIndices(checkConnectionResult.indices);\n setSelectedIndices(checkConnectionResult.indices);\n setNextSteps(currentStep.next_steps.filter((next_step) => next_step === 'START_REMOTE_REINDEX_MIGRATION'));\n } else if (checkConnectionResult?.error) {\n setErrrorMessage(checkConnectionResult.error);\n } else {\n setErrrorMessage('No available index has been found for remote reindex migration.');\n }\n }\n };\n\n const handleTriggerNextStep = async (step: MigrationActions, args?: StepArgs) => {\n setIsLoading(true);\n setErrrorMessage(null);\n\n return onTriggerStep(step, args).then((data) => {\n handleConnectionCheck(step, data);\n\n return data;\n }).catch((error) => {\n setErrrorMessage(error?.message);\n\n return {} as MigrationState;\n }).finally(() => setIsLoading(false));\n };\n\n const resetConnectionCheck = () => {\n setErrrorMessage(null);\n setIsLoading(false);\n setAvailableIndices([]);\n setSelectedIndices([]);\n setNextSteps(currentStep.next_steps.filter((step) => step === 'CHECK_REMOTE_INDEXER_CONNECTION'));\n };\n\n const handleChange = async (e: React.ChangeEvent, callback: (field: string, value: any, shouldValidate?: boolean) => Promise>) => {\n await callback(e.target.name, e.target.value);\n resetConnectionCheck();\n };\n\n const handleSelectIndices = (indexToToggle: string) => {\n if (selectedIndices.includes(indexToToggle)) {\n setSelectedIndices(selectedIndices.filter((index) => index !== indexToToggle));\n } else {\n setSelectedIndices([...selectedIndices, indexToToggle]);\n }\n };\n\n const initialValues: RemoteReindexRequest = {\n allowlist: '',\n hostname: '',\n user: '',\n password: '',\n synchronous: false,\n indices: [],\n };\n\n return (\n {\n }}>\n {({\n values,\n setFieldValue,\n }) => (\n \n )}\n \n );\n};\n\nexport default MigrateExistingData;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport { Space } from 'preflight/components/common';\n\nconst ShutdownClusterStep = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n The migration from your current OpenSearch
to the Data Node is almost done.
\n To finish please shut down your OpenSearch
cluster before continuing.
\n \n \n >\n);\nexport default ShutdownClusterStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Col, Panel, PanelGroup } from 'components/bootstrap';\nimport {\n MIGRATION_STATE,\n REMOTE_REINDEXING_MIGRATION_STEPS,\n} from 'components/datanode/Constants';\nimport type { MigrationActions, StepArgs, MigrationStateItem, MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\n\nimport Welcome from './remoteReindexing/Welcome';\nimport ExistingDataMigrationQuestion from './remoteReindexing/ExistingDataMigrationQuestion';\nimport RemoteReindexRunning from './remoteReindexing/RemoteReindexRunning';\nimport CertificatesProvisioning from './common/CertificatesProvisioning';\nimport MigrateExistingData from './remoteReindexing/MigrateExistingData';\nimport ShutdownClusterStep from './remoteReindexing/ShutdownClusterStep';\n\nconst StyledTitle = styled.h3`\n margin-bottom: 10px;\n\n & > small {\n font-size: 80%;\n }\n`;\n\nconst StyledPanelGroup = styled(PanelGroup)`\n &.panel-group > .panel {\n margin-top: 0;\n border-color: ${(props) => props.theme.colors.input.border};\n background-color: ${(props) => props.theme.colors.global.contentBackground};\n\n .panel-heading {\n background-color: ${(props) => props.theme.colors.table.row.backgroundAlt};\n }\n\n &:not(:first-child) {\n border-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n\n &:not(:last-child) {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n`;\n\nconst RemoteReindexingMigration = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => {\n const { state: activeStep } = currentStep;\n\n const onStepComplete = async (step: MigrationActions, args: StepArgs = {}) => onTriggerStep(step, args);\n\n const getStepComponent = (step: MigrationStateItem) => {\n switch (step) {\n case MIGRATION_STATE.REMOTE_REINDEX_WELCOME_PAGE.key:\n return ;\n case MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_PAGE.key:\n case MIGRATION_STATE.PROVISION_DATANODE_CERTIFICATES_RUNNING.key:\n return ;\n case MIGRATION_STATE.EXISTING_DATA_MIGRATION_QUESTION_PAGE.key:\n return ;\n case MIGRATION_STATE.MIGRATE_EXISTING_DATA.key:\n return ;\n case MIGRATION_STATE.REMOTE_REINDEX_RUNNING.key:\n return ;\n case MIGRATION_STATE.ASK_TO_SHUTDOWN_OLD_CLUSTER.key:\n return ;\n default:\n return ;\n }\n };\n\n return (\n \n Remote reindexing migration \n Follow these steps to migrate your existing OpenSearch 2.x or 1.3.x cluster to Data Nodes.
\n {}}>\n {REMOTE_REINDEXING_MIGRATION_STEPS.map((remoteReindexingStep, index) => {\n const { description } = MIGRATION_STATE[remoteReindexingStep];\n\n return (\n \n \n \n {`${index + 1}. ${description}`} \n \n \n \n \n {getStepComponent(remoteReindexingStep)}\n \n \n );\n })}\n \n \n );\n};\n\nexport default RemoteReindexingMigration;\n","// @ts-nocheck\n/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport { Col, Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport InPlaceMigration from 'components/datanode/migrations/InPlaceMigration';\nimport useMigrationState from 'components/datanode/hooks/useMigrationState';\nimport type { MigrationActions, StepArgs } from 'components/datanode/Types';\nimport useTriggerMigrationState from 'components/datanode/hooks/useTriggerMigrationState';\nimport {\n IN_PLACE_MIGRATION_STEPS,\n MIGRATION_STATE,\n REMOTE_REINDEXING_MIGRATION_STEPS,\n} from 'components/datanode/Constants';\nimport RemoteReindexingMigration from 'components/datanode/migrations/RemoteReindexingMigration';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\n\nconst ManualMigrationStep = () => {\n const migrationTypeOptions = [{ label: 'In-Place migration', value: 'SELECT_ROLLING_UPGRADE_MIGRATION' }, { label: 'Remote Re-indexing Migration', value: 'SELECT_REMOTE_REINDEX_MIGRATION' }];\n const { currentStep } = useMigrationState();\n const { onTriggerNextState } = useTriggerMigrationState();\n\n const onMigrationStepChange = async (step: MigrationActions, args?: StepArgs = {}) => onTriggerNextState({ step, args });\n\n return (\n <>\n {currentStep?.state === MIGRATION_STATE.MIGRATION_SELECTION_PAGE.key && (\n \n \n \n )}\n \n {(currentStep && IN_PLACE_MIGRATION_STEPS.includes(currentStep.state)) && }\n {(currentStep && REMOTE_REINDEXING_MIGRATION_STEPS.includes(currentStep.state)) && }\n >\n );\n};\n\nexport default ManualMigrationStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { useMemo } from 'react';\n\nimport { MIGRATION_STATE, MIGRATION_WIZARD_STEPS } from 'components/datanode/Constants';\nimport type { MigrationState } from 'components/datanode/Types';\nimport useMigrationState from 'components/datanode/hooks/useMigrationState';\n\nconst migrationStep = (\n currentStep: MigrationState,\n isLoading: boolean,\n) => {\n // @ts-ignore\n if (!isLoading && MIGRATION_WIZARD_STEPS.includes(currentStep?.state)) {\n return currentStep;\n }\n\n return { state: MIGRATION_STATE.MIGRATION_SELECTION_PAGE.key, next_steps: ['SELECT_ROLLING_UPGRADE_MIGRATION', 'SELECT_REMOTE_REINDEX_MIGRATION'] } as MigrationState;\n};\n\nconst useMigrationWizardStep = () => {\n const { currentStep, isLoading } = useMigrationState();\n const step = migrationStep(currentStep, isLoading);\n\n return useMemo(() => ({\n isLoading: isLoading,\n step,\n errors: null,\n }), [isLoading, step]);\n};\n\nexport default useMigrationWizardStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nimport CertificateRenewalPolicyConfig from 'components/datanode/DataNodeConfiguration/CertificateRenewalPolicyConfig';\nimport { Space } from 'preflight/components/common';\nimport type { MigrationStepComponentProps } from 'components/datanode/Types';\nimport MigrationStepTriggerButtonToolbar from 'components/datanode/migrations/common/MigrationStepTriggerButtonToolbar';\nimport MigrationError from 'components/datanode/migrations/common/MigrationError';\n\nconst CertificateRenewalStep = ({ currentStep, onTriggerStep }: MigrationStepComponentProps) => (\n <>\n \n \n \n {(currentStep.next_steps.length <= 0) && (Please create a certificate renewal policy before proceeding.
)}\n \n >\n);\nexport default CertificateRenewalStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\n\nconst MigrationFinishedStep = () => (\n The migration is finished !
\n);\nexport default MigrationFinishedStep;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Spinner, Wizard } from 'components/common';\nimport CAStep from 'components/datanode/migrations/CAStep';\nimport ManualMigrationStep from 'components/datanode/migrations/ManualMigrationStep';\nimport { MIGRATION_STATE } from 'components/datanode/Constants';\nimport useTriggerMigrationState from 'components/datanode/hooks/useTriggerMigrationState';\nimport type { MigrationActions, StepArgs } from 'components/datanode/Types';\nimport useMigrationWizardStep from 'components/datanode/hooks/useMigrationWizardStep';\nimport MigrationWelcomeStep from 'components/datanode/migrations/MigrationWelcomeStep';\nimport CertificateRenewalStep from 'components/datanode/migrations/CertificateRenewalStep';\nimport MigrationFinishedStep from 'components/datanode/migrations/MigrationFinishedStep';\n\nconst StyledWizard = styled(Wizard)`\n .migration-wizard{\n .nav > li > a {\n background-color: red !important;\n }\n }\n`;\n\nconst MigrationWizard = () => {\n const { step: currentStep, isLoading } = useMigrationWizardStep();\n const { onTriggerNextState } = useTriggerMigrationState();\n\n if (isLoading) {\n return ;\n }\n\n const onTriggerStep = async (step: MigrationActions, args: StepArgs = {}) => onTriggerNextState({ step, args });\n\n const { state: activeStep } = currentStep;\n\n const steps = [\n {\n key: MIGRATION_STATE.MIGRATION_WELCOME_PAGE.key,\n title: MIGRATION_STATE.MIGRATION_WELCOME_PAGE.description,\n component: ,\n },\n {\n key: MIGRATION_STATE.CA_CREATION_PAGE.key,\n title: MIGRATION_STATE.CA_CREATION_PAGE.description,\n component: ,\n },\n {\n key: MIGRATION_STATE.RENEWAL_POLICY_CREATION_PAGE.key,\n title: MIGRATION_STATE.RENEWAL_POLICY_CREATION_PAGE.description,\n component: ,\n },\n {\n key: MIGRATION_STATE.MIGRATION_SELECTION_PAGE.key,\n title: MIGRATION_STATE.MIGRATION_SELECTION_PAGE.description,\n component: ,\n },\n {\n key: MIGRATION_STATE.FINISHED.key,\n title: MIGRATION_STATE.FINISHED.description,\n component: ,\n },\n ];\n\n return (\n {}}\n horizontal\n justified\n containerClassName=\"migration-wizard\"\n hidePreviousNextButtons />\n );\n};\n\nexport default MigrationWizard;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useState } from 'react';\n\nimport type { DataNodesCA } from 'preflight/types';\nimport type FetchError from 'logic/errors/FetchError';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\n\nexport const QUERY_KEY = ['data-nodes', 'ca-status'];\nconst fetchDataNodesCA = (): Promise => (\n fetch('GET', qualifyUrl('/api/ca'), undefined, false)\n);\n\nconst useDataNodesCA = (): {\n data: DataNodesCA,\n isFetching: boolean,\n error: FetchError,\n isInitialLoading: boolean\n} => {\n const [metaData, setMetaData] = useState<{\n error: FetchError | null,\n isInitialLoading: boolean,\n }>({\n error: null,\n isInitialLoading: false,\n });\n const {\n data,\n isFetching,\n } = useQuery({\n queryKey: QUERY_KEY,\n queryFn: fetchDataNodesCA,\n initialData: undefined,\n refetchInterval: 3000,\n retry: false,\n onError: (newError) => {\n setMetaData({\n error: newError,\n isInitialLoading: false,\n });\n },\n onSuccess: () => {\n setMetaData({\n error: null,\n isInitialLoading: false,\n });\n },\n });\n\n return {\n data,\n isFetching,\n isInitialLoading: metaData.isInitialLoading,\n error: metaData.error,\n };\n};\n\nexport default useDataNodesCA;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\n\nimport fetch from 'logic/rest/FetchProvider';\nimport { ConfirmDialog } from 'components/common';\nimport { Button } from 'components/bootstrap';\nimport { qualifyUrl } from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { QUERY_KEY as DATA_NODES_CA_QUERY_KEY } from 'preflight/hooks/useDataNodesCA';\nimport { MIGRATION_STATE_QUERY_KEY } from 'components/datanode/hooks/useMigrationState';\n\nconst resetMigration = async () => fetch('DELETE', qualifyUrl('/migration/state'));\n\nconst ResetMigrationButton = () => {\n const queryClient = useQueryClient();\n const [showDialog, setShowDialog] = useState(false);\n\n const { mutateAsync: onResetMigration } = useMutation(resetMigration, {\n onSuccess: () => {\n UserNotification.success('Migration state reset successful.');\n queryClient.invalidateQueries(DATA_NODES_CA_QUERY_KEY);\n queryClient.invalidateQueries(MIGRATION_STATE_QUERY_KEY);\n },\n onError: (error) => {\n UserNotification.error(`Resetting migration state failed with status: ${error}`, 'Could not reset the migration state.');\n },\n });\n\n return (\n <>\n \n {showDialog && (\n {\n await onResetMigration();\n setShowDialog(false);\n }}\n onCancel={() => setShowDialog(false)}>\n Are you sure you want to reset the migration?\n \n )}\n >\n );\n};\n\nexport default ResetMigrationButton;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React, { useEffect } from 'react';\n\nimport { Row, Col } from 'components/bootstrap';\nimport { DocumentTitle, PageHeader } from 'components/common';\nimport DocsHelper from 'util/DocsHelper';\nimport DataNodesPageNavigation from 'components/datanode/DataNodePageNavigation';\nimport MigrationWizard from 'components/datanode/migrations/MigrationWizard';\nimport useMigrationWizardStep from 'components/datanode/hooks/useMigrationWizardStep';\nimport useTriggerMigrationState from 'components/datanode/hooks/useTriggerMigrationState';\nimport { MIGRATION_STATE } from 'components/datanode/Constants';\nimport ResetMigrationButton from 'components/datanode/migrations/common/ResetMigrationButton';\n\nconst DataNodesMigrationPage = () => {\n const { step: currentStep, isLoading } = useMigrationWizardStep();\n const { onTriggerNextState } = useTriggerMigrationState();\n\n useEffect(() => {\n if (!isLoading && currentStep.state === MIGRATION_STATE.NEW.key) {\n onTriggerNextState({ step: currentStep.next_steps[0], args: {} });\n }\n }, [currentStep.next_steps, currentStep.state, isLoading, onTriggerNextState]);\n\n return (\n \n \n }\n documentationLink={{\n title: 'Data Nodes documentation',\n path: DocsHelper.PAGES.GRAYLOG_DATA_NODE,\n }}>\n \n Graylog Data Nodes offer a better integration with Graylog and simplify future updates. They allow you to index and search through all the messages in your Graylog message database.\n \n \n \n \n \n \n
\n \n );\n};\n\nexport default DataNodesMigrationPage;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { BadgeProps } from '@mantine/core';\nimport { Badge as MantineBadge } from '@mantine/core';\n\ntype Props = BadgeProps & {\n title: string,\n}\n\nconst Badge = ({ children, ...props }: Props) => (\n \n {children}\n \n);\nexport default Badge;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport styled, { css } from 'styled-components';\nimport type { DefaultTheme } from 'styled-components';\nimport { Button as MantineButton } from '@mantine/core';\nimport type { ButtonProps } from '@mantine/core';\nimport type { ComponentPropsWithoutRef, ComponentProps } from 'react';\n\ntype StyledMantineButtonProps = ComponentProps<'button'> & ButtonProps & {\n theme: DefaultTheme,\n};\n\nconst StyledButton = styled(MantineButton)>(({ theme }: StyledMantineButtonProps) => css`\n ${theme.components.button}\n`);\n\ninterface HTMLButtonProps extends ComponentPropsWithoutRef<'button'> {\n type?: 'submit' | 'button' | 'reset';\n children: React.ReactNode;\n}\n\ninterface ReactRouterButtonProps {\n children: React.ReactNode;\n component: React.ReactElement;\n to: string;\n}\n\nexport type CustomButtonProps = HTMLButtonProps | ReactRouterButtonProps | StyledMantineButtonProps;\n\nconst Button = forwardRef(({ children, ...otherProps }: CustomButtonProps, ref) => (\n \n {children}\n \n));\n\nButton.defaultProps = {\n type: 'button',\n};\n\nexport default Button;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { Grid } from '@mantine/core';\n\nconst Col = ({ children, ...props }: React.ComponentProps) => (\n // eslint-disable-next-line react/prop-types\n \n {children}\n \n);\n\nexport default Col;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { DropzoneProps } from '@mantine/dropzone';\nimport { Dropzone as MantineDropzone } from '@mantine/dropzone';\n\ntype Props = DropzoneProps\n\nconst Dropzone = ({ children, ...props }: Props) => (\n \n {children}\n \n);\n\nDropzone.Accept = MantineDropzone.Accept;\nDropzone.Reject = MantineDropzone.Reject;\nDropzone.Reject = MantineDropzone.Reject;\nDropzone.Idle = MantineDropzone.Idle;\nexport default Dropzone;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { TextInput as MantineTextInput } from '@mantine/core';\n\nconst TextInput = (props: React.ComponentProps) => (\n \n);\n\nexport default TextInput;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\n\nimport * as React from 'react';\nimport { Field } from 'formik';\n\nimport TextInput from 'preflight/components/common/TextInput';\n\ntype Props = {\n name: string,\n label: React.ReactNode,\n placeholder?: string,\n type?: string\n required?: boolean,\n}\n\nconst FormikTextInput = ({ name, placeholder, label, type, required }: Props) => (\n \n {({ field: { value, onChange, onBlur }, meta: { error: validationError } }) => (\n \n )}\n \n);\n\nFormikTextInput.defaultProps = {\n placeholder: undefined,\n type: undefined,\n required: false,\n};\n\nexport default FormikTextInput;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { GridProps } from '@mantine/core';\nimport { Grid as MantineGrid } from '@mantine/core';\n\ntype Props = GridProps\n\nconst Grid = ({ children, ...props }: Props) => (\n \n {children}\n \n);\n\nGrid.Col = MantineGrid.Col;\nexport default Grid;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { Input as MantineInput } from '@mantine/core';\n\nconst Input = (props: React.ComponentProps) => (\n \n);\n\nInput.Error = MantineInput.Error;\nInput.Label = MantineInput.Label;\n\nexport default Input;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport type { ListProps } from '@mantine/core';\nimport { List as MantineList } from '@mantine/core';\n\nconst StyledList = styled(MantineList)(({ theme }) => css`\n color: ${theme.colors.global.textDefault};\n`);\n\ntype ListComponent = ((props: ListProps) => React.ReactElement) & {\n Item: typeof MantineList.Item\n}\n\nconst List: ListComponent = ({ children, ...props }: ListProps) => (\n \n {children}\n \n);\n\nList.Item = MantineList.Item;\nexport default List;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { Grid } from '@mantine/core';\n\nconst Row = ({ children, ...props }: React.ComponentProps) => (\n \n {children}\n \n);\n\nexport default Row;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\nimport type { DefaultTheme } from 'styled-components';\nimport { Box } from '@mantine/core';\nimport type { BoxProps, TitleOrder } from '@mantine/core';\n\nimport Col from 'preflight/components/common/Col';\nimport Row from 'preflight/components/common/Row';\nimport { Title } from 'preflight/components/common';\n\ntype ContainerType = BoxProps & {\n theme: DefaultTheme,\n component: any;\n};\n\nconst TitleActionContainer = styled(Box)`\n display: flex;\n justify-content: flex-end;\n gap: 5px;\n`;\nconst SubsectionContainer = styled(Box)>(({ theme }: ContainerType) => css`\n padding: ${theme.spacings.md};\n margin-bottom: ${theme.spacings.xs};\n`);\n\nconst SectionContainer = styled(SubsectionContainer)(({ theme }: ContainerType) => css`\n background-color: ${theme.colors.global.contentBackground};\n border: 1px solid ${theme.colors.variant.lighter.default};\n border-radius: 4px;\n`);\n\ntype Props = {\n title: React.ReactNode,\n actions?: React.ReactNode,\n titleOrder?: TitleOrder\n dataTestid?: string,\n};\n\nconst SectionHeader = ({ title, actions, titleOrder }: Props) => (\n \n \n {title} \n \n \n {actions} \n \n
\n);\n\nSectionHeader.defaultProps = {\n actions: undefined,\n titleOrder: 2,\n};\n\nexport const Subsection = ({ title, children, actions, titleOrder }: React.PropsWithChildren) => (\n \n \n {children}\n \n);\n\nSubsection.defaultProps = {\n actions: undefined,\n titleOrder: undefined,\n};\n\nconst Section = ({ title, children, actions, titleOrder, dataTestid }: React.PropsWithChildren) => (\n \n \n {children}\n \n);\n\nSection.defaultProps = {\n actions: undefined,\n titleOrder: undefined,\n};\n\nexport default Section;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { SelectProps } from '@mantine/core';\nimport { Select as MantineSelect } from '@mantine/core';\nimport { useTheme } from 'styled-components';\n\nconst Select = ({ children, ...otherProps }: SelectProps) => {\n const theme = useTheme();\n const SelectStyles = () => ({\n input: {\n color: theme.colors.input.color,\n backgroundColor: theme.colors.input.background,\n borderColor: theme.colors.input.border,\n },\n dropdown: {\n color: theme.colors.input.color,\n backgroundColor: theme.colors.input.background,\n },\n });\n\n return (\n \n {children}\n \n );\n};\n\nexport default Select;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { SpaceProps } from '@mantine/core';\nimport { Space as MantineSpace } from '@mantine/core';\n\ntype Props = SpaceProps\n\nconst Space = (props: Props) => (\n \n);\nexport default Space;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { TabsProps } from '@mantine/core';\nimport { Tabs as MantineTabs } from '@mantine/core';\n\ntype Props = TabsProps\n\nconst Tabs = ({ children, ...props }: Props) => (\n \n {children}\n \n);\n\nTabs.List = MantineTabs.List;\nTabs.Tab = MantineTabs.Tab;\nTabs.Panel = MantineTabs.Panel;\nexport default Tabs;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport type { TitleProps } from '@mantine/core';\nimport { Title as MantineTitle } from '@mantine/core';\n\ntype Props = TitleProps;\nconst Title = ({ children, ...props }: Props) => (\n \n {children}\n \n);\nexport default Title;\n"],"names":["Container","StyledButton","theme","items","path","title","permissions","exactPathMatch","TIME_UNITS_UPPER","unit","StyledDefList","handleSaveConfig","configToSave","smallestUnit","duration","fetchCurrentConfig","NoExistingPolicy","createPolicy","certicateRenewalModes","mode","DEFAULT_CONFIG","queryKey","renewalModeExplanation","lifetimeExplanation","CertificateRenewalPolicyConfig","className","showModal","setShowModal","currentConfig","isLoading","sendTelemetry","pathname","queryClient","updateConfig","err","formConfig","certificate_lifetime","lifetimeUnit","lifetimeValue","modalTitle","resetConfig","saveConfig","values","newConfig","setFieldValue","isSubmitting","isValid","isValidating","name","value","onChange","newValue","enableDataNodeMigration","NAV_ITEMS","bulkRemoveDataNode","entity_ids","selectBackFailedEntities","failures","successfully_performed","entity_id","errorThrown","bulkStartDataNode","bulkStopDataNode","removeDataNode","datanodeId","startDataNode","stopDataNode","rejoinDataNode","renewDatanodeCertificate","nodeId","error","fetchDataNodes","params","url","enabled","refetchInterval","data","refetch","isInitialLoading","MIGRATION_STATE_QUERY_KEY","QUERY_KEY","fetchDataNodesCA","useDataNodesCA","metaData","setMetaData","isFetching","newError","createCA","caData","onCreateCA","UserNotification","onSubmit","formValues","UnsecureConnectionAlert","renderIfSecure","connectionIsSecure","Alert","CADropzone","DropzoneInner","Files","File","DeleteIcon","submitUpload","formData","file","validate","errors","Explanation","onRejectUpload","onProcessUpload","files","fileName","index","_ignored","idx","TAB_KEYS","CACreateForm","MIGRATION_STEP","MIGRATION_STATE","IN_PLACE_MIGRATION_STEPS","REMOTE_REINDEXING_MIGRATION_STEPS","MIGRATION_WIZARD_STEPS","MIGRATION_ACTIONS","StyledButtonToolbar","MigrationStepTriggerButtonToolbar","nextSteps","disabled","onTriggerStep","args","hidden","step","StyledAlert","errorMessage","currentStep","StyledIcon","MigrationDatanodeList","showProvisioningState","dataNodes","useDataNodes","datanode","StyledPanel","bsStyle","Headline","StyledHelpPanel","useMigrationState","isProvisioningOverview","isProvisioningRunning","haveNextStep","fetchJournalDowntimeSize","isError","DownsizeWarning","fetchCompatibility","Grid","StyledSpan","hostname","opensearchVersion","nodeInfo","opensearchLocation","nodes","activeAccordion","setActiveAccordion","handleSelect","nextKey","node","indice","CompatibilityAlert","CompatibilityCheckStep","requestError","isCompatible","StyledTitle","StyledPanelGroup","props","activeStep","onStepComplete","getStepComponent","inPlaceStep","description","onTriggerNextState","isLoadingNextMigrationState","RemoteReindexFinishedStatusActions","setNextSteps","migrationStatus","setMigrationStatus","fetchCurrentMigrationStatus","action","_migrationStatus","interval","IndicesContainer","handleTriggerStep","indicesWithErrors","setErrrorMessage","setIsLoading","availableIndices","setAvailableIndices","selectedIndices","setSelectedIndices","handleConnectionCheck","checkConnectionResult","next_step","handleTriggerNextStep","resetConnectionCheck","handleChange","e","callback","handleSelectIndices","indexToToggle","initialValues","remoteReindexingStep","migrationTypeOptions","onMigrationStepChange","migrationStep","StyledWizard","steps","CAStep","resetMigration","showDialog","setShowDialog","onResetMigration","DocsHelper","children","Button","otherProps","ref","Dropzone","FormikTextInput","placeholder","label","type","required","onBlur","validationError","Input","StyledList","List","TitleActionContainer","SubsectionContainer","SectionContainer","SectionHeader","actions","titleOrder","Subsection","Section","dataTestid","Select","SelectStyles","Tabs"],"sourceRoot":""}