All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.325e2d4b-8062.8bc6a272e9b061a42a1e.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"file":"325e2d4b-8062.8bc6a272e9b061a42a1e.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/common/withPaginationQueryParameter.tsx","webpack://graylog-web-interface/./src/components/indices/Types.ts","webpack://graylog-web-interface/./src/components/indices/ClosedIndexDetails.jsx","webpack://graylog-web-interface/./src/stores/indices/IndexRangesStore.ts","webpack://graylog-web-interface/./src/components/indices/IndexDetails.tsx","webpack://graylog-web-interface/./src/components/indices/IndexRangeSummary.jsx","webpack://graylog-web-interface/./src/components/indices/IndexMaintenanceStrategiesConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/MessageCountRotationStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/MessageCountRotationStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/SizeBasedRotationStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/SizeBasedRotationStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/TimeBasedRotationStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/TimeBasedRotationStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/rotation/index.ts","webpack://graylog-web-interface/./src/components/indices/retention/DeletionRetentionStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/retention/DeletionRetentionStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/retention/ClosingRetentionStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/retention/ClosingRetentionStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/retention/NoopRetentionStrategyConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/retention/NoopRetentionStrategySummary.jsx","webpack://graylog-web-interface/./src/components/indices/retention/index.ts","webpack://graylog-web-interface/./src/components/indices/IndexSetConfigurationForm.tsx","webpack://graylog-web-interface/./src/components/indices/IndexSetDeletionForm.jsx","webpack://graylog-web-interface/./src/components/indices/StyledIndexSetDetailsRow.tsx","webpack://graylog-web-interface/./src/components/indices/IndexSetDetails.tsx","webpack://graylog-web-interface/./src/components/indices/IndexSetsComponent.jsx","webpack://graylog-web-interface/./src/components/indices/IndexSummary.jsx","webpack://graylog-web-interface/./src/components/indices/IndexSizeSummary.jsx","webpack://graylog-web-interface/./src/stores/indices/DeflectorStore.js","webpack://graylog-web-interface/./src/components/indices/IndicesMaintenanceDropdown.jsx","webpack://graylog-web-interface/./src/components/indices/IndicesOverview.jsx","webpack://graylog-web-interface/./src/components/indices/IndexMaintenanceStrategiesSummary.jsx","webpack://graylog-web-interface/./src/components/indices/IndicesConfiguration.jsx","webpack://graylog-web-interface/./src/components/indices/ShardMeter.jsx","webpack://graylog-web-interface/./src/components/indices/ShardRouting.jsx","webpack://graylog-web-interface/./src/components/indices/ShardRoutingOverview.jsx","webpack://graylog-web-interface/./src/stores/indices/IndexSetsStore.ts","webpack://graylog-web-interface/./src/stores/indices/IndicesStore.ts"],"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';\n\nimport usePaginationQueryParameter from 'hooks/usePaginationQueryParameter';\n\nexport type PaginationQueryParameterObject = {\n  pageSizes?: number[];\n};\n\nfunction withPaginationQueryParameter(Component: React.ComponentType, obj?: PaginationQueryParameterObject) {\n  return function WrappedComponent(props) {\n    const result = usePaginationQueryParameter(obj?.pageSizes);\n\n    return ;\n  };\n}\n\nexport default withPaginationQueryParameter;\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 PropTypes from 'prop-types';\n\nexport type IndicesConfigurationActionsType = {\n  loadRotationStrategies: () => Promise,\n  loadRetentionStrategies: () => Promise,\n};\nexport type IndicesConfigurationStoreState = {\n  activeRotationConfig: any,\n  rotationStrategies: any,\n  activeRetentionConfig: any,\n  retentionStrategies: any,\n  retentionStrategiesContext: RetentionStrategyContext,\n}\nexport type SizeBasedRotationStrategyConfig = {\n  type: string,\n  max_size: number,\n}\nexport type MessageCountRotationStrategyConfig = {\n  type: string,\n  max_docs_per_index: number,\n}\nexport type TimeBasedRotationStrategyConfig = {\n  type: string,\n  rotation_period: string,\n  max_rotation_period: string,\n  rotate_empty_index_set: boolean,\n}\nexport type RotationStrategyConfig = SizeBasedRotationStrategyConfig | MessageCountRotationStrategyConfig | TimeBasedRotationStrategyConfig;\nexport type RetentionStrategyConfig = {\n  type: string,\n  max_number_of_indices?: number,\n  index_action?: string,\n}\nexport interface JsonSchemaStringPropertyType {\n  type: string,\n}\nexport interface JsonSchemaIndexActionPropertyType {\n  type: string,\n  enum: Array,\n}\nexport interface JsonSchemaBooleanPropertyType {\n  type: string;\n}\nexport interface RotationProperties {\n  rotation_period?: JsonSchemaStringPropertyType,\n  max_rotation_period?: JsonSchemaStringPropertyType,\n  type: JsonSchemaStringPropertyType,\n  max_size?: JsonSchemaStringPropertyType,\n  rotate_empty_index_set: JsonSchemaBooleanPropertyType,\n}\nexport interface RotationJsonSchema {\n  type: string,\n  id: string,\n  properties: RotationProperties,\n}\nexport interface RetentionProperties {\n  max_number_of_indices: JsonSchemaStringPropertyType,\n  type: JsonSchemaStringPropertyType,\n  index_action?: JsonSchemaIndexActionPropertyType,\n}\nexport interface RetentionJsonSchema {\n  type: string,\n  id: string,\n  properties: RetentionProperties,\n}\nexport interface RotationStrategy {\n  type: string,\n  default_config: RotationStrategyConfig,\n  json_schema: RotationJsonSchema,\n}\nexport interface RetentionStrategy {\n  type: string,\n  default_config: RetentionStrategyConfig,\n  json_schema: RetentionJsonSchema,\n}\nexport interface RetentionStrategyContext {\n  max_index_retention_period?: string,\n}\nexport interface RotationStrategyResponse {\n  total: number,\n  strategies: Array,\n}\nexport interface RetentionStrategyResponse {\n  total: number,\n  strategies: Array,\n  context: RetentionStrategyContext,\n}\nexport const RetentionStrategiesContextPropType = PropTypes.shape({\n  max_index_retention_period: PropTypes.string,\n});\nexport const SizeBasedRotationStrategyConfigPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  max_size: PropTypes.number.isRequired,\n});\nexport const MessageCountRotationStrategyConfigPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  max_docs_per_index: PropTypes.number.isRequired,\n});\nexport const TimeBasedRotationStrategyConfigPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  rotation_period: PropTypes.string.isRequired,\n  max_rotation_period: PropTypes.string,\n  rotate_empty_index_set: PropTypes.bool,\n});\n\nexport const RotationStrategyConfigPropType = PropTypes.oneOfType([\n  SizeBasedRotationStrategyConfigPropType,\n  MessageCountRotationStrategyConfigPropType,\n  TimeBasedRotationStrategyConfigPropType,\n]);\n\nexport const IndexActionPropType = PropTypes.string;\nexport const RetentionStrategyConfigPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  max_number_of_indices: PropTypes.number,\n  index_action: PropTypes.string,\n});\n\nexport const JsonSchemaStringPropertyTypePropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n});\nexport const JsonSchemaIndexActionPropertyTypePropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  enum: PropTypes.arrayOf(PropTypes.string).isRequired,\n});\nexport const RotationPropertiesPropType = PropTypes.exact({\n  rotation_period: JsonSchemaStringPropertyTypePropType,\n  max_rotation_period: JsonSchemaStringPropertyTypePropType,\n  type: JsonSchemaStringPropertyTypePropType.isRequired,\n  max_size: JsonSchemaStringPropertyTypePropType,\n  max_docs_per_index: JsonSchemaStringPropertyTypePropType,\n  rotate_empty_index_set: JsonSchemaStringPropertyTypePropType,\n});\nexport const RotationJsonSchemaPropType = PropTypes.exact({\n  type: PropTypes.string,\n  id: PropTypes.string,\n  properties: RotationPropertiesPropType.isRequired,\n});\nexport const RetentionPropertiesPropType = PropTypes.exact({\n  max_number_of_indices: JsonSchemaStringPropertyTypePropType.isRequired,\n  type: JsonSchemaStringPropertyTypePropType.isRequired,\n  index_action: JsonSchemaIndexActionPropertyTypePropType,\n});\nexport const RetentionJsonSchemaPropType = PropTypes.exact({\n  type: PropTypes.string,\n  id: PropTypes.string,\n  properties: RetentionPropertiesPropType,\n});\nexport const RotationStrategyPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  default_config: RotationStrategyConfigPropType.isRequired,\n  json_schema: RotationJsonSchemaPropType.isRequired,\n});\nexport const RetentionStrategyPropType = PropTypes.exact({\n  type: PropTypes.string.isRequired,\n  default_config: RetentionStrategyConfigPropType.isRequired,\n  json_schema: RetentionJsonSchemaPropType.isRequired,\n});\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Icon } from 'components/common';\nimport { Alert, Button } from 'components/bootstrap';\nimport { IndexRangeSummary } from 'components/indices';\nimport { IndicesActions } from 'stores/indices/IndicesStore';\n\nclass ClosedIndexDetails extends React.Component {\n  static propTypes = {\n    indexName: PropTypes.string.isRequired,\n    indexRange: PropTypes.object,\n  };\n\n  _onReopen = () => {\n    IndicesActions.reopen(this.props.indexName);\n  };\n\n  _onDeleteIndex = () => {\n    if (window.confirm(`Really delete index ${this.props.indexName}?`)) {\n      IndicesActions.delete(this.props.indexName);\n    }\n  };\n\n  render() {\n    const { indexRange } = this.props;\n\n    return (\n      
\n \n This index is closed. Index information is not available{' '}\n at the moment, please reopen the index and try again.\n \n\n
\n\n {' '}\n \n
\n );\n }\n}\n\nexport default ClosedIndexDetails;\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 Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport * as URLUtils from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport type IndexRange = {\n index_name: string,\n begin: string,\n end: string,\n calculated_at: string,\n took_ms: number,\n};\n\ntype IndexRangesActionsType = {\n list: () => Promise,\n recalculate: (indexSetId: string) => Promise,\n recalculateIndex: (indexName: string) => Promise,\n}\nexport const IndexRangesActions = singletonActions(\n 'core.IndexRanges',\n () => Reflux.createActions({\n list: { asyncResult: true },\n recalculate: { asyncResult: true },\n recalculateIndex: { asyncResult: true },\n }),\n);\n\nexport const IndexRangesStore = singletonStore(\n 'core.IndexRanges',\n () => Reflux.createStore({\n listenables: [IndexRangesActions],\n indexRanges: undefined,\n\n getInitialState() {\n return { indexRanges: this.indexRanges };\n },\n init() {\n IndexRangesActions.list();\n },\n list() {\n const url = URLUtils.qualifyUrl(ApiRoutes.IndexRangesApiController.list().url);\n const promise = fetch('GET', url).then((response) => {\n this.indexRanges = response.ranges;\n\n this.trigger(this.getInitialState());\n });\n\n IndexRangesActions.list.promise(promise);\n },\n recalculate(indexSetId) {\n const url = URLUtils.qualifyUrl(ApiRoutes.IndexRangesApiController.rebuild(indexSetId).url);\n const promise = fetch('POST', url);\n\n promise\n .then(UserNotification.success('Index ranges will be recalculated shortly'))\n .catch((error) => {\n UserNotification.error(`Could not create a job to start index ranges recalculation, reason: ${error}`,\n 'Error starting index ranges recalculation');\n });\n\n IndexRangesActions.recalculate.promise(promise);\n },\n recalculateIndex(indexName) {\n const url = URLUtils.qualifyUrl(ApiRoutes.IndexRangesApiController.rebuildSingle(indexName).url);\n const promise = fetch('POST', url);\n\n promise\n .then(UserNotification.success(`Index ranges for ${indexName} will be recalculated shortly`))\n .catch((error) => {\n UserNotification.error(`Could not create a job to start index ranges recalculation for ${indexName}, reason: ${error}`,\n `Error starting index ranges recalculation for ${indexName}`);\n });\n\n IndexRangesActions.recalculateIndex.promise(promise);\n },\n }),\n);\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 PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useMemo } from 'react';\n\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport NumberUtils from 'util/NumberUtils';\nimport { Col, Row, Button } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport { IndexRangeSummary, ShardMeter, ShardRoutingOverview } from 'components/indices';\nimport type { IndexInfo } from 'stores/indices/IndicesStore';\nimport type { IndexRange } from 'stores/indices/IndexRangesStore';\nimport { IndexRangesActions } from 'stores/indices/IndexRangesStore';\nimport { IndicesActions } from 'stores/indices/IndicesStore';\n\ntype Props = {\n index: IndexInfo,\n indexName: string,\n indexRange: IndexRange,\n indexSetId: string,\n isDeflector: boolean,\n};\n\nconst IndexDetails = ({ index, indexName, indexRange, indexSetId, isDeflector }: Props) => {\n useEffect(() => {\n IndicesActions.subscribe(indexName);\n\n return () => {\n IndicesActions.unsubscribe(indexName);\n };\n }, [indexName]);\n\n const _onRecalculateIndex = useCallback(() => {\n if (window.confirm(`Really recalculate the index ranges for index ${indexName}?`)) {\n IndexRangesActions.recalculateIndex(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n }, [indexName, indexSetId]);\n\n const _onCloseIndex = useCallback(() => {\n if (window.confirm(`Really close index ${indexName}?`)) {\n IndicesActions.close(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n }, [indexName, indexSetId]);\n\n const _onDeleteIndex = useCallback(() => {\n if (window.confirm(`Really delete index ${indexName}?`)) {\n IndicesActions.delete(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n }, [indexName, indexSetId]);\n\n const actionButtons = useMemo(() => {\n if (isDeflector) {\n return (\n \n {' '}\n \n \n );\n }\n\n return (\n \n {' '}\n {' '}\n \n \n );\n }, [isDeflector, _onCloseIndex, _onDeleteIndex, _onRecalculateIndex]);\n\n if (!index || !index.all_shards) {\n return ;\n }\n\n return (\n
\n {' '}\n\n \n {NumberUtils.formatNumber(index.all_shards.segments)} segments,{' '}\n {NumberUtils.formatNumber(index.all_shards.open_search_contexts)} open search contexts,{' '}\n {NumberUtils.formatNumber(index.all_shards.documents.deleted)} deleted messages\n \n \n \n \n \n \n \n \n \n \n
\n\n {actionButtons}\n
\n );\n};\n\nIndexDetails.propTypes = {\n index: PropTypes.object.isRequired,\n indexName: PropTypes.string.isRequired,\n indexRange: PropTypes.object.isRequired,\n indexSetId: PropTypes.string.isRequired,\n isDeflector: PropTypes.bool.isRequired,\n};\n\nexport default IndexDetails;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport RelativeTime from 'components/common/RelativeTime';\n\nclass IndexRangeSummary extends React.Component {\n static propTypes = {\n indexRange: PropTypes.object,\n };\n\n render() {\n const { indexRange } = this.props;\n\n if (!indexRange) {\n return No index range available.;\n }\n\n return (\n Range re-calculated{' '}\n {' '}\n in {indexRange.took_ms}ms.\n \n );\n }\n}\n\nexport default IndexRangeSummary;\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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useState, useCallback } from 'react';\nimport { useFormikContext } from 'formik';\nimport styled from 'styled-components';\n\nimport { Input, Alert } from 'components/bootstrap';\nimport { Select, Icon } from 'components/common';\n\nconst TIME_BASED_ROTATION_STRATEGY = 'org.graylog2.indexer.rotation.strategies.TimeBasedRotationStrategy';\nconst NOOP_RETENTION_STRATEGY = 'org.graylog2.indexer.retention.strategies.NoopRetentionStrategy';\n\nconst StyledH3 = styled.h3`\n margin-bottom: 10px;\n`;\nconst StyledSelect = styled(Select)`\n margin-bottom: 10px;\n`;\nconst StyledAlert = styled(Alert)`\n overflow: auto;\n margin-right: 15px;\n margin-left: 15px;\n`;\n\nconst _getStrategyJsonSchema = (selectedStrategy, strategies) => {\n const result = strategies.filter((s) => s.type === selectedStrategy)[0];\n\n return result ? result.json_schema : undefined;\n};\n\nconst _getDefaultStrategyConfig = (selectedStrategy, strategies) => {\n const result = strategies.filter((s) => s.type === selectedStrategy)[0];\n\n return result ? result.default_config : undefined;\n};\n\nconst _getTimeBaseStrategyWithElasticLimit = (activeConfig, strategies) => {\n const timeBasedStrategy = _getDefaultStrategyConfig(TIME_BASED_ROTATION_STRATEGY, strategies);\n\n return { ...activeConfig, max_rotation_period: timeBasedStrategy?.max_rotation_period };\n};\n\nconst _getStrategyConfig = (selectedStrategy, activeStrategy, activeConfig, strategies) => {\n if (activeStrategy === selectedStrategy) {\n // If the newly selected strategy is the current active strategy, we use the active configuration.\n return activeStrategy === TIME_BASED_ROTATION_STRATEGY ? _getTimeBaseStrategyWithElasticLimit(activeConfig, strategies) : activeConfig;\n }\n\n // If the newly selected strategy is not the current active strategy, we use the selected strategy's default config.\n return _getDefaultStrategyConfig(selectedStrategy, strategies);\n};\n\nconst _getConfigurationComponent = (selectedStrategy, pluginExports, strategies, strategy, config, onConfigUpdate) => {\n if (!selectedStrategy || selectedStrategy.length < 1) {\n return null;\n }\n\n const strategyPlugin = pluginExports.filter((exportedStrategy) => exportedStrategy.type === selectedStrategy)[0];\n\n if (!strategyPlugin) {\n return null;\n }\n\n const strategyConfig = _getStrategyConfig(selectedStrategy, strategy, config, strategies);\n const element = React.createElement(strategyPlugin.configComponent, {\n config: strategyConfig,\n jsonSchema: _getStrategyJsonSchema(selectedStrategy, strategies),\n updateConfig: onConfigUpdate,\n });\n\n return ({element});\n};\n\nconst IndexMaintenanceStrategiesConfiguration = ({\n title,\n description,\n selectPlaceholder,\n pluginExports,\n strategies,\n retentionStrategiesContext: { max_index_retention_period: maxRetentionPeriod },\n activeConfig: { strategy, config },\n getState,\n}) => {\n const [newStrategy, setNewStrategy] = useState(strategy);\n const {\n setValues,\n values,\n values: {\n rotation_strategy_class: rotationStrategyClass,\n retention_strategy_class: retentionStrategyClass,\n },\n } = useFormikContext();\n\n const _onSelect = (selectedStrategy) => {\n if (!selectedStrategy || selectedStrategy.length < 1) {\n setNewStrategy(undefined);\n\n return;\n }\n\n const newConfig = _getStrategyConfig(selectedStrategy, strategy, config, strategies);\n\n setNewStrategy(selectedStrategy);\n setValues({ ...values, ...getState(selectedStrategy, newConfig) });\n };\n\n const _onConfigUpdate = useCallback((newConfig) => {\n const _addConfigType = (selectedStrategy, data) => {\n // The config object needs to have the \"type\" field set to the \"default_config.type\" to make the REST call work.\n const result = strategies.filter((s) => s.type === selectedStrategy)[0];\n const copy = data;\n\n if (result) {\n copy.type = result.default_config.type;\n }\n\n return copy;\n };\n\n const configuration = _addConfigType(newStrategy, newConfig);\n setValues({ ...values, ...getState(newStrategy, configuration) });\n }, [getState, newStrategy, setValues, strategies, values]);\n\n const _availableSelectOptions = () => {\n return pluginExports\n .filter((c) => strategies.find(({ type }) => type === c.type))\n .map((c) => {\n return { value: c.type, label: c.displayName };\n });\n };\n\n const _activeSelection = () => {\n return newStrategy;\n };\n\n const retentionIsNotNoop = retentionStrategyClass !== NOOP_RETENTION_STRATEGY;\n const shouldShowMaxRetentionWarning = maxRetentionPeriod && rotationStrategyClass === TIME_BASED_ROTATION_STRATEGY && retentionIsNotNoop;\n\n return (\n \n {title}\n \n {' '} {description}\n \n {shouldShowMaxRetentionWarning && (\n \n {' '} The effective retention period value calculated from the Rotation period and the\n max number of indices should not be greater than the Max retention period of {maxRetentionPeriod} set by the Administrator.\n \n )}\n \n \n \n {_getConfigurationComponent(_activeSelection(), pluginExports, strategies, strategy, config, _onConfigUpdate)}\n \n );\n};\n\nIndexMaintenanceStrategiesConfiguration.propTypes = {\n title: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n selectPlaceholder: PropTypes.string.isRequired,\n pluginExports: PropTypes.array.isRequired,\n strategies: PropTypes.array.isRequired,\n retentionStrategiesContext: PropTypes.shape({\n max_index_retention_period: PropTypes.string,\n }),\n activeConfig: PropTypes.object.isRequired,\n getState: PropTypes.func.isRequired,\n};\n\nIndexMaintenanceStrategiesConfiguration.defaultProps = {\n retentionStrategiesContext: {\n max_index_retention_period: undefined,\n },\n};\n\nexport default IndexMaintenanceStrategiesConfiguration;\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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { getValueFromInput } from 'util/FormsUtils';\nimport { Input } from 'components/bootstrap';\n\nconst MessageCountRotationStrategyConfiguration = ({ config, updateConfig }) => {\n const { max_docs_per_index } = config;\n const [maxDocsPerIndex, setMaxDocsPerIndex] = useState(max_docs_per_index);\n\n const _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n const value = getValueFromInput(e.target);\n update[field] = value;\n\n setMaxDocsPerIndex(value);\n updateConfig(update);\n };\n };\n\n return (\n
\n \n
\n );\n};\n\nMessageCountRotationStrategyConfiguration.propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n};\n\nexport default MessageCountRotationStrategyConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nconst MessageCountRotationStrategySummary = ({ config }) => {\n return (\n
\n
\n
Index rotation strategy:
\n
Message Count
\n
Max docs per index:
\n
{config.max_docs_per_index}
\n
\n
\n );\n};\n\nMessageCountRotationStrategySummary.propTypes = {\n config: PropTypes.object.isRequired,\n};\n\nexport default MessageCountRotationStrategySummary;\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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { getValueFromInput } from 'util/FormsUtils';\nimport { Input } from 'components/bootstrap';\nimport NumberUtils from 'util/NumberUtils';\n\nconst SizeBasedRotationStrategyConfiguration = ({ config, updateConfig }) => {\n const { max_size } = config;\n const [maxSize, setMaxSize] = useState(max_size);\n\n const _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n const value = getValueFromInput(e.target);\n update[field] = value;\n\n setMaxSize(value);\n updateConfig(update);\n };\n };\n\n const _formatSize = () => {\n return NumberUtils.formatBytes(maxSize);\n };\n\n return (\n
\n \n
\n );\n};\n\nSizeBasedRotationStrategyConfiguration.propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n};\n\nexport default SizeBasedRotationStrategyConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport NumberUtils from 'util/NumberUtils';\n\nconst SizeBasedRotationStrategySummary = ({ config }) => {\n const { max_size: maxSize } = config;\n\n return (\n
\n
\n
Index rotation strategy:
\n
Index Size
\n
Max index size:
\n
{maxSize} bytes ({NumberUtils.formatBytes(maxSize)})
\n
\n
\n );\n};\n\nSizeBasedRotationStrategySummary.propTypes = {\n config: PropTypes.object.isRequired,\n};\n\nexport default SizeBasedRotationStrategySummary;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport moment from 'moment';\n\nimport { Input } from 'components/bootstrap';\n\nconst _validationLimit = (durationInMilliseconds, rotationLimit) => {\n return durationInMilliseconds <= moment.duration(rotationLimit).asMilliseconds();\n};\n\nclass TimeBasedRotationStrategyConfiguration extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n };\n\n inputs = {};\n\n constructor(props) {\n super(props);\n const {\n config: {\n rotation_period: rotationPeriod,\n max_rotation_period: rotationLimit,\n rotate_empty_index_set: rotateEmptyIndexSet,\n },\n } = this.props;\n\n this.state = {\n rotation_period: rotationPeriod,\n rotationLimit,\n rotate_empty_index_set: rotateEmptyIndexSet,\n };\n }\n\n _onPeriodUpdate = (field) => {\n const { updateConfig } = this.props;\n\n return () => {\n const update = {};\n let period = this.inputs[field].getValue().toUpperCase();\n\n if (!period.startsWith('P')) {\n period = `P${period}`;\n }\n\n update[field] = period;\n\n this.setState(update);\n\n if (this._isValidPeriod(update[field])) {\n // Only propagate state if the config is valid.\n updateConfig(update);\n }\n };\n };\n\n _onRotateEmptyIndexSetUpdate = (field) => {\n const { updateConfig } = this.props;\n\n return () => {\n const update = {};\n const rotateEmptyIndexSet = this.inputs[field].getValue();\n\n update[field] = rotateEmptyIndexSet;\n\n this.setState(update);\n\n updateConfig(update);\n };\n };\n\n _isValidPeriod = (duration) => {\n const { rotation_period: rotationPeriod, rotationLimit } = this.state;\n const check = duration || rotationPeriod;\n const checkInMilliseconds = moment.duration(check).asMilliseconds();\n\n return checkInMilliseconds >= 3600000 && (\n rotationLimit ? _validationLimit(checkInMilliseconds, rotationLimit) : true\n );\n };\n\n _validationState = () => {\n if (this._isValidPeriod()) {\n return undefined;\n }\n\n return 'error';\n };\n\n _formatDuration = () => {\n const { rotation_period: rotationPeriod, rotationLimit } = this.state;\n const maxRotationPeriodErrorMessage = rotationLimit ? ` and max ${moment.duration(rotationLimit).humanize()}` : '';\n\n return this._isValidPeriod() ? moment.duration(rotationPeriod).humanize() : `invalid (min 1 hour${maxRotationPeriodErrorMessage})`;\n };\n\n render() {\n const {\n rotation_period: rotationPeriod,\n rotate_empty_index_set: rotateEmptyIndexSet,\n rotationLimit,\n } = this.state;\n const maxRotationPeriodHelpText = rotationLimit ? ` The max rotation period is set to ${moment.duration(rotationLimit).humanize()} by Administrator.` : '';\n\n return (\n
\n { this.inputs.rotation_period = rotationPeriodRef; }}\n label=\"Rotation period (ISO8601 Duration)\"\n onChange={this._onPeriodUpdate('rotation_period')}\n value={rotationPeriod}\n help={`How long an index gets written to before it is rotated. (i.e. \"P1D\" for 1 day, \"PT6H\" for 6 hours).${maxRotationPeriodHelpText}`}\n addonAfter={this._formatDuration()}\n bsStyle={this._validationState()}\n required />\n \n { this.inputs.rotate_empty_index_set = rotateEmptyIndexSetRef; }}\n label=\"Rotate empty index set\"\n onChange={this._onRotateEmptyIndexSetUpdate('rotate_empty_index_set')}\n checked={rotateEmptyIndexSet}\n help=\"Apply the rotation strategy even when the index set is empty (not recommended).\" />\n \n
\n );\n }\n}\n\nexport default TimeBasedRotationStrategyConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport moment from 'moment';\nimport {} from 'moment-duration-format';\n\nclass TimeBasedRotationStrategySummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n };\n\n _humanizedPeriod = () => {\n const duration = moment.duration(this.props.config.rotation_period);\n\n return `${duration.format()}, ${duration.humanize()}`;\n };\n\n render() {\n return (\n
\n
\n
Index rotation strategy:
\n
Index Time
\n
Rotation period:
\n
{this.props.config.rotation_period} ({this._humanizedPeriod()})
\n
\n
\n );\n }\n}\n\nexport default TimeBasedRotationStrategySummary;\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 { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport MessageCountRotationStrategyConfiguration from './MessageCountRotationStrategyConfiguration';\nimport MessageCountRotationStrategySummary from './MessageCountRotationStrategySummary';\nimport SizeBasedRotationStrategyConfiguration from './SizeBasedRotationStrategyConfiguration';\nimport SizeBasedRotationStrategySummary from './SizeBasedRotationStrategySummary';\nimport TimeBasedRotationStrategyConfiguration from './TimeBasedRotationStrategyConfiguration';\nimport TimeBasedRotationStrategySummary from './TimeBasedRotationStrategySummary';\n\nPluginStore.register(new PluginManifest({}, {\n indexRotationConfig: [\n {\n type: 'org.graylog2.indexer.rotation.strategies.MessageCountRotationStrategy',\n displayName: 'Index Message Count',\n configComponent: MessageCountRotationStrategyConfiguration,\n summaryComponent: MessageCountRotationStrategySummary,\n },\n {\n type: 'org.graylog2.indexer.rotation.strategies.SizeBasedRotationStrategy',\n displayName: 'Index Size',\n configComponent: SizeBasedRotationStrategyConfiguration,\n summaryComponent: SizeBasedRotationStrategySummary,\n },\n {\n type: 'org.graylog2.indexer.rotation.strategies.TimeBasedRotationStrategy',\n displayName: 'Index Time',\n configComponent: TimeBasedRotationStrategyConfiguration,\n summaryComponent: TimeBasedRotationStrategySummary,\n },\n ],\n}));\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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { getValueFromInput } from 'util/FormsUtils';\nimport { Input } from 'components/bootstrap';\n\nconst DeletionRetentionStrategyConfiguration = ({ config, updateConfig }) => {\n const { max_number_of_indices } = config;\n const [maxNumberOfIndices, setMaxNumberOfIndices] = useState(max_number_of_indices);\n\n const _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n const value = getValueFromInput(e.target);\n update[field] = value;\n\n setMaxNumberOfIndices(value);\n updateConfig(update);\n };\n };\n\n return (\n
\n Maximum number of indices to keep before deleting the oldest ones}\n required />\n
\n );\n};\n\nDeletionRetentionStrategyConfiguration.propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n};\n\nexport default DeletionRetentionStrategyConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nconst DeletionRetentionStrategySummary = ({ config }) => {\n return (\n
\n
\n
Index retention strategy:
\n
Delete
\n
Max number of indices:
\n
{config.max_number_of_indices}
\n
\n
\n );\n};\n\nDeletionRetentionStrategySummary.propTypes = {\n config: PropTypes.object.isRequired,\n};\n\nexport default DeletionRetentionStrategySummary;\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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nimport { getValueFromInput } from 'util/FormsUtils';\nimport { Input } from 'components/bootstrap';\n\nconst ClosingRetentionStrategyConfiguration = ({ config, updateConfig }) => {\n const { max_number_of_indices } = config;\n const [maxNumberOfIndices, setMaxNumberOfIndices] = useState(max_number_of_indices);\n\n const _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n const value = getValueFromInput(e.target);\n update[field] = value;\n\n setMaxNumberOfIndices(value);\n updateConfig(update);\n };\n };\n\n return (\n
\n Maximum number of indices to keep before closing the oldest ones}\n required />\n
\n );\n};\n\nClosingRetentionStrategyConfiguration.propTypes = {\n config: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n};\n\nexport default ClosingRetentionStrategyConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nconst ClosingRetentionStrategySummary = ({ config }) => {\n return (\n
\n
\n
Index retention strategy:
\n
Close
\n
Max number of indices:
\n
{config.max_number_of_indices}
\n
\n
\n );\n};\n\nClosingRetentionStrategySummary.propTypes = {\n config: PropTypes.object.isRequired,\n};\n\nexport default ClosingRetentionStrategySummary;\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\nconst StyledAlert = styled(Alert)`\n overflow: auto;\n margin-right: 15px;\n margin-left: 15px;\n`;\n\nconst NoopRetentionStrategyConfiguration = () => {\n return (\n \n This retention strategy is not configurable because it does not do anything.\n \n );\n};\n\nexport default NoopRetentionStrategyConfiguration;\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\nconst NoopRetentionStrategySummary = () => {\n return (\n
\n
\n
Index retention strategy:
\n
Do nothing
\n
\n
\n );\n};\n\nexport default NoopRetentionStrategySummary;\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 { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport DeletionRetentionStrategyConfiguration from './DeletionRetentionStrategyConfiguration';\nimport DeletionRetentionStrategySummary from './DeletionRetentionStrategySummary';\nimport ClosingRetentionStrategyConfiguration from './ClosingRetentionStrategyConfiguration';\nimport ClosingRetentionStrategySummary from './ClosingRetentionStrategySummary';\nimport NoopRetentionStrategyConfiguration from './NoopRetentionStrategyConfiguration';\nimport NoopRetentionStrategySummary from './NoopRetentionStrategySummary';\n\nPluginStore.register(new PluginManifest({}, {\n indexRetentionConfig: [\n {\n type: 'org.graylog2.indexer.retention.strategies.DeletionRetentionStrategy',\n displayName: 'Delete Index',\n configComponent: DeletionRetentionStrategyConfiguration,\n summaryComponent: DeletionRetentionStrategySummary,\n },\n {\n type: 'org.graylog2.indexer.retention.strategies.ClosingRetentionStrategy',\n displayName: 'Close Index',\n configComponent: ClosingRetentionStrategyConfiguration,\n summaryComponent: ClosingRetentionStrategySummary,\n },\n {\n type: 'org.graylog2.indexer.retention.strategies.NoopRetentionStrategy',\n displayName: 'Do nothing',\n configComponent: NoopRetentionStrategyConfiguration,\n summaryComponent: NoopRetentionStrategySummary,\n },\n ],\n}));\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport moment from 'moment';\nimport { Formik, Form, Field } from 'formik';\nimport styled from 'styled-components';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { FormikFormGroup, FormikInput, FormSubmit, Spinner, TimeUnitInput } from 'components/common';\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport history from 'util/History';\nimport { Col, Row, Input } from 'components/bootstrap';\nimport IndexMaintenanceStrategiesConfiguration from 'components/indices/IndexMaintenanceStrategiesConfiguration';\nimport 'components/indices/rotation';\nimport 'components/indices/retention';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\n\nimport type { RetentionStrategyContext } from './Types';\n\ntype Props = {\n cancelLink: string,\n create: boolean,\n indexSet: IndexSet,\n onUpdate: (indexSet: IndexSet) => void,\n retentionStrategies: Array,\n retentionStrategiesContext: RetentionStrategyContext,\n rotationStrategies: Array,\n submitButtonText: string,\n submitLoadingText: string,\n};\n\ntype Unit = 'seconds' | 'minutes';\n\ntype State = {\n indexSet: IndexSet,\n fieldTypeRefreshIntervalUnit: Unit,\n};\nconst StyledFormSubmit = styled(FormSubmit)`\n margin-left: 0;\n`;\n\nconst _validateIndexPrefix = (value) => {\n let error;\n\n if (value.length === 0) {\n error = 'Invalid index prefix: cannot be empty';\n } else if (value.indexOf('_') === 0 || value.indexOf('-') === 0 || value.indexOf('+') === 0) {\n error = 'Invalid index prefix: must start with a letter or number';\n } else if (value.toLocaleLowerCase() !== value) {\n error = 'Invalid index prefix: must be lower case';\n } else if (!value.match(/^[a-z0-9][a-z0-9_\\-+]*$/)) {\n error = 'Invalid index prefix: must only contain letters, numbers, \\'_\\', \\'-\\' and \\'+\\'';\n }\n\n return error;\n};\n\nconst _getRotationConfigState = (strategy: string, data: string) => {\n return { rotation_strategy_class: strategy, rotation_strategy: data };\n};\n\nconst _getRetentionConfigState = (strategy: string, data: string) => {\n return { retention_strategy_class: strategy, retention_strategy: data };\n};\n\nclass IndexSetConfigurationForm extends React.Component {\n static propTypes = {\n indexSet: PropTypes.object.isRequired,\n rotationStrategies: PropTypes.array.isRequired,\n retentionStrategies: PropTypes.array.isRequired,\n retentionStrategiesContext: PropTypes.shape({\n max_index_retention_period: PropTypes.string,\n }).isRequired,\n create: PropTypes.bool,\n onUpdate: PropTypes.func.isRequired,\n cancelLink: PropTypes.string.isRequired,\n submitButtonText: PropTypes.string.isRequired,\n submitLoadingText: PropTypes.string.isRequired,\n };\n\n static defaultProps = {\n create: false,\n };\n\n constructor(props: Props) {\n super(props);\n const { indexSet } = this.props;\n\n this.state = {\n indexSet: indexSet,\n fieldTypeRefreshIntervalUnit: 'seconds',\n };\n }\n\n _saveConfiguration = (values) => {\n const { onUpdate } = this.props;\n\n return onUpdate(values);\n };\n\n render() {\n const { indexSet, fieldTypeRefreshIntervalUnit } = this.state;\n const {\n rotationStrategies,\n retentionStrategies,\n create,\n cancelLink,\n indexSet: {\n rotation_strategy: indexSetRotationStrategy,\n rotation_strategy_class: indexSetRotationStrategyClass,\n retention_strategy: indexSetRetentionStrategy,\n retention_strategy_class: IndexSetRetentionStrategyClass,\n },\n retentionStrategiesContext,\n submitButtonText,\n submitLoadingText,\n } = this.props;\n let rotationConfig;\n\n if (rotationStrategies) {\n // The component expects a different structure - legacy\n const activeConfig = {\n config: indexSetRotationStrategy,\n strategy: indexSetRotationStrategyClass,\n };\n\n rotationConfig = (\n \n );\n } else {\n rotationConfig = ();\n }\n\n let retentionConfig;\n\n if (retentionStrategies) {\n // The component expects a different structure - legacy\n const activeConfig = {\n config: indexSetRetentionStrategy,\n strategy: IndexSetRetentionStrategyClass,\n };\n\n retentionConfig = (\n \n );\n } else {\n retentionConfig = ();\n }\n\n let readOnlyconfig;\n\n if (create) {\n const indexPrefixHelp = (\n \n A unique prefix used in Elasticsearch indices belonging to this index set.\n The prefix must start with a letter or number, and can only contain letters, numbers, '_', '-' and '+'.\n \n );\n\n readOnlyconfig = (\n \n \n \n \n );\n }\n\n const onCancel = () => history.push(cancelLink);\n\n return (\n \n \n \n {({ isValid, setFieldValue, isSubmitting }) => (\n
\n \n \n \n \n {readOnlyconfig}\n \n \n \n \n \n \n \n \n \n {({ field: { name, value, onChange } }) => {\n const _onFieldTypeRefreshIntervalChange = (intervalValue: number, unit: Unit) => {\n onChange(name, moment.duration(intervalValue, unit).asMilliseconds());\n setFieldValue(name, moment.duration(intervalValue, unit).asMilliseconds());\n this.setState({ fieldTypeRefreshIntervalUnit: unit });\n };\n\n return (\n \n \n \n );\n }}\n \n \n \n \n \n {indexSet.writable && rotationConfig}\n \n \n \n \n {indexSet.writable && retentionConfig}\n \n \n\n \n \n \n \n \n\n
\n )}\n
\n \n
\n );\n }\n}\n\nexport default IndexSetConfigurationForm;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Spinner } from 'components/common';\nimport { Alert, Row, Col, Input } from 'components/bootstrap';\nimport BootstrapModalForm from 'components/bootstrap/BootstrapModalForm';\nimport { StreamsStore } from 'stores/streams/StreamsStore';\n\nclass IndexSetDeletionForm extends React.Component {\n static propTypes = {\n indexSet: PropTypes.object.isRequired,\n onDelete: PropTypes.func.isRequired,\n };\n\n state = {\n assignedStreams: undefined,\n deleteIndices: true,\n };\n\n forms = {};\n\n _onModalOpen = () => {\n StreamsStore.load((streams) => {\n const assignedStreams = [];\n\n streams.forEach((stream) => {\n if (stream.index_set_id === this.props.indexSet.id) {\n assignedStreams.push({ id: stream.id, title: stream.title });\n }\n });\n\n this.setState({ assignedStreams: assignedStreams });\n });\n };\n\n _onRemoveClick = (e) => {\n this.setState({ deleteIndices: e.target.checked });\n };\n\n open = () => {\n this.forms[`index-set-deletion-modal-${this.props.indexSet.id}`].open();\n };\n\n close = () => {\n this.forms[`index-set-deletion-modal-${this.props.indexSet.id}`].close();\n };\n\n _isLoading = () => {\n return !this.state.assignedStreams;\n };\n\n _isDeletable = () => {\n return !this._isLoading() && this.state.assignedStreams.length < 1 && !this.props.indexSet.default;\n };\n\n _modalContent = () => {\n if (this._isLoading()) {\n return ;\n }\n\n if (this.props.indexSet.default) {\n return (\n \n \n \n Unable to delete the index set because it is the default index set!\n \n \n \n );\n }\n\n if (!this._isDeletable()) {\n const assignedStreams = this.state.assignedStreams\n .sort((s1, s2) => naturalSort(s1.title, s2.title))\n .map((stream) =>
  • {stream.title}
  • );\n\n return (\n
    \n \n \n \n Unable to delete the index set because it has assigned streams. Remove stream assignments to be able to delete this index set.\n \n \n \n \n \n

    Assigned streams:

    \n
      \n {assignedStreams}\n
    \n \n
    \n
    \n );\n }\n\n return (\n \n \n All indices related to this index set will be deleted from Elasticsearch.}\n checked={this.state.deleteIndices}\n onChange={this._onRemoveClick} />\n \n \n );\n };\n\n _onDelete = (e) => {\n e.preventDefault();\n\n if (this._isDeletable()) {\n this.props.onDelete(this.props.indexSet, this.state.deleteIndices);\n }\n };\n\n render() {\n return (\n { this.forms[`index-set-deletion-modal-${this.props.indexSet.id}`] = elem; }}\n title={`Delete index set \"${this.props.indexSet.title}\"?`}\n onModalOpen={this._onModalOpen}\n onSubmitForm={this._onDelete}\n submitButtonText=\"Delete\"\n submitButtonDisabled={!this._isDeletable()}>\n {this._modalContent()}\n \n );\n }\n}\n\nexport default IndexSetDeletionForm;\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 styled from 'styled-components';\n\nimport { Row } from 'components/bootstrap';\n\nconst StyledIndexSetDetailsRow = styled(Row)`\ndl {\n margin-bottom: 0;\n\n dt {\n float: left;\n width: 190px;\n overflow: hidden;\n clear: left;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n dd {\n margin-left: 180px;\n }\n}\n`;\n\nexport default StyledIndexSetDetailsRow;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport { Col } from 'components/bootstrap';\nimport { IndicesConfiguration } from 'components/indices';\nimport type { IndexSet } from 'stores/indices/IndexSetsStore';\n\nimport StyledIndexSetDetailsRow from './StyledIndexSetDetailsRow';\n\ntype Props = {\n indexSet: IndexSet,\n};\n\nconst IndexSetDetails = ({ indexSet }: Props) => {\n return (\n \n \n
    \n
    Index prefix:
    \n
    {indexSet.index_prefix}
    \n \n
    Shards:
    \n
    {indexSet.shards}
    \n
    Replicas:
    \n
    {indexSet.replicas}
    \n
    \n
    Field type refresh interval:
    \n
    {indexSet.field_type_refresh_interval / 1000.0} seconds
    \n
    \n \n\n \n \n \n
    \n );\n};\n\nIndexSetDetails.propTypes = { indexSet: PropTypes.object.isRequired };\nexport default IndexSetDetails;\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 PropTypes from 'prop-types';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport ButtonToolbar from 'components/bootstrap/ButtonToolbar';\nimport { Link, LinkContainer } from 'components/common/router';\nimport { Button, Col, DropdownButton, Label, MenuItem } from 'components/bootstrap';\nimport { EntityList, EntityListItem, PaginatedList, Spinner } from 'components/common';\nimport Routes from 'routing/Routes';\nimport StringUtils from 'util/StringUtils';\nimport NumberUtils from 'util/NumberUtils';\nimport { IndexSetDeletionForm, IndexSetDetails } from 'components/indices';\nimport withPaginationQueryParameter from 'components/common/withPaginationQueryParameter';\nimport { IndexSetsActions, IndexSetsStore } from 'stores/indices/IndexSetsStore';\n\nconst IndexSetsComponent = createReactClass({\n // eslint-disable-next-line react/no-unused-class-component-methods\n propTypes: {\n paginationQueryParameter: PropTypes.object.isRequired,\n },\n\n mixins: [Reflux.connect(IndexSetsStore)],\n\n componentDidMount() {\n this.loadData(this.props.paginationQueryParameter.page, this.PAGE_SIZE);\n },\n\n forms: {},\n\n loadData(pageNo, limit) {\n this.currentPageNo = pageNo;\n this.currentPageSize = limit;\n IndexSetsActions.listPaginated((pageNo - 1) * limit, limit, true);\n IndexSetsActions.stats();\n },\n\n // Stores the current page and page size to be able to reload the current page\n currentPageNo: 1,\n\n currentPageSize: 10,\n PAGE_SIZE: 10,\n\n _onChangePaginatedList(page, size) {\n this.loadData(page, size);\n },\n\n _onSetDefault(indexSet) {\n return () => {\n IndexSetsActions.setDefault(indexSet).then(() => this.loadData(this.currentPageNo, this.currentPageSize));\n };\n },\n\n _onDelete(indexSet) {\n return () => {\n this.forms[`index-set-deletion-form-${indexSet.id}`].open();\n };\n },\n\n _deleteIndexSet(indexSet, deleteIndices) {\n this.props.paginationQueryParameter.resetPage();\n\n IndexSetsActions.delete(indexSet, deleteIndices).then(() => {\n this.loadData(1, this.PAGE_SIZE);\n });\n },\n // eslint-disable-next-line react/no-unstable-nested-components\n _formatIndexSet(indexSet) {\n const { indexSetStats } = this.state;\n\n const actions = (\n \n \n \n \n \n Set as default\n \n \n Delete\n \n \n );\n\n const content = (\n \n \n\n { this.forms[`index-set-deletion-form-${indexSet.id}`] = elem; }} indexSet={indexSet} onDelete={this._deleteIndexSet} />\n \n );\n\n const indexSetTitle = (\n \n {indexSet.title}\n \n );\n\n const isDefault = indexSet.default ? : '';\n const isReadOnly = !indexSet.writable ? : '';\n let { description } = indexSet;\n\n if (indexSet.default) {\n description += `${description.endsWith('.') ? '' : '.'} Graylog will use this index set by default.`;\n }\n\n let statsString;\n const stats = indexSetStats[indexSet.id];\n\n if (stats) {\n statsString = this._formatStatsString(stats);\n }\n\n return (\n {statsString} {isDefault} {isReadOnly}}\n description={description}\n actions={actions}\n contentRow={content} />\n );\n },\n\n _formatStatsString(stats) {\n if (!stats) {\n return 'N/A';\n }\n\n const indices = `${NumberUtils.formatNumber(stats.indices)} ${StringUtils.pluralize(stats.indices, 'index', 'indices')}`;\n const documents = `${NumberUtils.formatNumber(stats.documents)} ${StringUtils.pluralize(stats.documents, 'document', 'documents')}`;\n const size = NumberUtils.formatBytes(stats.size);\n\n return `${indices}, ${documents}, ${size}`;\n },\n\n _isLoading() {\n const { indexSets } = this.state;\n\n return !indexSets;\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { globalIndexSetStats, indexSetsCount, indexSets } = this.state;\n\n return (\n
    \n

    Total: {this._formatStatsString(globalIndexSetStats)}

    \n\n
    \n\n \n this._formatIndexSet(indexSet))} />\n \n
    \n );\n },\n});\n\nexport default withPaginationQueryParameter(IndexSetsComponent);\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Label } from 'components/bootstrap';\nimport { RelativeTime, Icon } from 'components/common';\nimport { IndexSizeSummary } from 'components/indices';\n\nclass IndexSummary extends React.Component {\n static propTypes = {\n children: PropTypes.node.isRequired,\n index: PropTypes.object.isRequired,\n indexRange: PropTypes.object,\n isDeflector: PropTypes.bool.isRequired,\n name: PropTypes.string.isRequired,\n };\n\n state = { showDetails: this.props.isDeflector };\n\n _formatLabels = (index) => {\n const labels = [];\n\n if (index.is_deflector) {\n labels.push();\n }\n\n if (index.is_closed) {\n labels.push();\n }\n\n if (index.is_reopened) {\n labels.push();\n }\n\n return {labels};\n };\n\n _formatIndexRange = () => {\n if (this.props.isDeflector) {\n return Contains messages up to ;\n }\n\n const sizes = this.props.index.size;\n\n if (sizes) {\n const count = sizes.events;\n const { deleted } = sizes;\n\n if (count === 0 || count - deleted === 0) {\n return 'Index does not contain any messages.';\n }\n }\n\n if (!this.props.indexRange) {\n return 'Time range of index is unknown, because index range is not available. Please recalculate index ranges manually.';\n }\n\n if (this.props.indexRange.begin === 0) {\n return Contains messages up to ;\n }\n\n return (\n \n Contains messages from up to{' '}\n \n \n );\n };\n\n _formatShowDetailsLink = () => {\n if (this.state.showDetails) {\n return Hide Details / Actions;\n }\n\n return Show Details / Actions;\n };\n\n _toggleShowDetails = (event) => {\n event.preventDefault();\n this.setState({ showDetails: !this.state.showDetails });\n };\n\n render() {\n const { index } = this.props;\n\n return (\n \n

    \n {this.props.name}{' '}\n\n \n {this._formatLabels(index)}{' '}\n {this._formatIndexRange(index)}{' '}\n\n \n\n {this._formatShowDetailsLink()}\n \n

    \n\n
    \n {this.state.showDetails && this.props.children}\n
    \n
    \n );\n }\n}\n\nexport default IndexSummary;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport numeral from 'numeral';\n\nimport NumberUtils from 'util/NumberUtils';\n\nclass IndexSizeSummary extends React.Component {\n static propTypes = {\n index: PropTypes.object.isRequired,\n };\n\n render() {\n const { index } = this.props;\n\n if (index.size) {\n return (\n ({NumberUtils.formatBytes(index.size.bytes)}{' '}\n / {numeral(index.size.events).format('0,0')} messages){' '}\n \n );\n }\n\n return ;\n }\n}\n\nexport default IndexSizeSummary;\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 Reflux from 'reflux';\n\nimport * as URLUtils from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const DeflectorActions = singletonActions(\n 'core.Deflector',\n () => Reflux.createActions({\n cycle: { asyncResult: true },\n list: { asyncResult: true },\n }),\n);\n\nexport const DeflectorStore = singletonStore(\n 'core.Deflector',\n () => Reflux.createStore({\n listenables: [DeflectorActions],\n deflector: {\n info: undefined,\n },\n getInitialState() {\n return { deflector: this.deflector };\n },\n cycle(indexSetId) {\n const url = URLUtils.qualifyUrl(ApiRoutes.DeflectorApiController.cycle(indexSetId).url);\n const promise = fetch('POST', url);\n\n DeflectorActions.cycle.promise(promise);\n },\n list(indexSetId) {\n const url = URLUtils.qualifyUrl(ApiRoutes.DeflectorApiController.list(indexSetId).url);\n const promise = fetch('GET', url).then((info) => {\n this.deflector.info = info;\n this.trigger({ deflector: this.deflector });\n });\n\n DeflectorActions.list.promise(promise);\n },\n }),\n);\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { ButtonGroup, DropdownButton, MenuItem } from 'components/bootstrap';\nimport { DeflectorActions } from 'stores/indices/DeflectorStore';\nimport { IndexRangesActions } from 'stores/indices/IndexRangesStore';\n\nclass IndicesMaintenanceDropdown extends React.Component {\n static propTypes = {\n indexSetId: PropTypes.string.isRequired,\n indexSet: PropTypes.object,\n };\n\n _onRecalculateIndexRange = () => {\n if (window.confirm('This will recalculate index ranges for this index set using a background system job. Do you want to proceed?')) {\n const { indexSetId } = this.props;\n IndexRangesActions.recalculate(indexSetId);\n }\n };\n\n _onCycleDeflector = () => {\n if (window.confirm('This will manually cycle the current active write index on this index set. Do you want to proceed?')) {\n const { indexSetId } = this.props;\n\n DeflectorActions.cycle(indexSetId).then(() => {\n DeflectorActions.list(indexSetId);\n });\n }\n };\n\n render() {\n let cycleButton;\n\n const { indexSet } = this.props;\n\n if (indexSet?.writable) {\n cycleButton = Rotate active write index;\n }\n\n return (\n \n \n Recalculate index ranges\n {cycleButton}\n \n \n );\n }\n}\n\nexport default IndicesMaintenanceDropdown;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Col, Row } from 'components/bootstrap';\nimport { ClosedIndexDetails, IndexDetails, IndexSummary } from 'components/indices';\n\nclass IndicesOverview extends React.Component {\n static propTypes = {\n closedIndices: PropTypes.array.isRequired,\n deflector: PropTypes.object.isRequired,\n indexDetails: PropTypes.object.isRequired,\n indices: PropTypes.object.isRequired,\n indexSetId: PropTypes.string.isRequired,\n };\n\n _formatIndex = (indexName, index) => {\n const indexSummary = this.props.indices[indexName];\n const indexRange = indexSummary && indexSummary.range ? indexSummary.range : null;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n };\n\n _formatClosedIndex = (indexName, index) => {\n const indexRange = index.range;\n\n return (\n \n \n \n \n \n \n \n \n \n );\n };\n\n render() {\n const indices = Object.keys(this.props.indices).map((indexName) => {\n return !this.props.indices[indexName].is_closed\n ? this._formatIndex(indexName, this.props.indices[indexName]) : this._formatClosedIndex(indexName, this.props.indices[indexName]);\n });\n\n return (\n \n {indices.sort((index1, index2) => naturalSort(index2.key, index1.key))}\n \n );\n }\n}\n\nexport default IndicesOverview;\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Alert } from 'components/bootstrap';\nimport Spinner from 'components/common/Spinner';\n\nclass IndexMaintenanceStrategiesSummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n pluginExports: PropTypes.array.isRequired,\n };\n\n render() {\n if (!this.props.config) {\n return ();\n }\n\n const activeStrategy = this.props.config.strategy;\n const strategy = this.props.pluginExports.filter((exportedStrategy) => exportedStrategy.type === activeStrategy)[0];\n\n if (!strategy || !strategy.summaryComponent) {\n return (Summary for strategy {activeStrategy} not found!);\n }\n\n const element = React.createElement(strategy.summaryComponent, { config: this.props.config.config });\n\n return ({element});\n }\n}\n\nexport default IndexMaintenanceStrategiesSummary;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport { Row, Col } from 'components/bootstrap';\nimport IndexMaintenanceStrategiesSummary from 'components/indices/IndexMaintenanceStrategiesSummary';\nimport 'components/indices/rotation'; // Load rotation plugin UI plugins from core.\nimport 'components/indices/retention'; // Load rotation plugin UI plugins from core.\n\nclass IndicesConfiguration extends React.Component {\n static propTypes = {\n indexSet: PropTypes.object.isRequired,\n };\n\n render() {\n const { indexSet } = this.props;\n\n if (!indexSet.writable) {\n return (\n \n \n Index set is not writable and will not be included in index rotation and retention.\n It is also not possible to assign it to a stream.\n \n \n );\n }\n\n const rotationConfig = {\n strategy: indexSet.rotation_strategy_class,\n config: indexSet.rotation_strategy,\n };\n const retentionConfig = {\n strategy: indexSet.retention_strategy_class,\n config: indexSet.retention_strategy,\n };\n\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n\nexport default IndicesConfiguration;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport numeral from 'numeral';\nimport moment from 'moment';\n\nclass ShardMeter extends React.Component {\n static propTypes = {\n title: PropTypes.string.isRequired,\n shardMeter: PropTypes.object.isRequired,\n };\n\n _formatMeter = (meter) => {\n const value = {numeral(meter.total).format('0,0')} ops;\n\n if (meter.total > 0) {\n return {value} (took {moment.duration(meter.time_seconds, 'seconds').humanize()});\n }\n\n return value;\n };\n\n render() {\n const sm = this.props.shardMeter;\n\n return (\n \n

    {this.props.title}

    \n
    \n
    Index:
    \n
    {this._formatMeter(sm.index)}
    \n\n
    Flush:
    \n
    {this._formatMeter(sm.flush)}
    \n\n
    Merge:
    \n
    {this._formatMeter(sm.merge)}
    \n\n
    Query:
    \n
    {this._formatMeter(sm.search_query)}
    \n\n
    Fetch:
    \n
    {this._formatMeter(sm.search_fetch)}
    \n\n
    Get:
    \n
    {this._formatMeter(sm.get)}
    \n\n
    Refresh:
    \n
    {this._formatMeter(sm.refresh)}
    \n
    \n
    \n );\n }\n}\n\nexport default ShardMeter;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport classNames from 'classnames';\n\nimport { OverlayTrigger } from 'components/common';\nimport { Tooltip } from 'components/bootstrap';\n\nclass ShardRouting extends React.Component {\n static propTypes = {\n route: PropTypes.object.isRequired,\n };\n\n render() {\n const { route } = this.props;\n const tooltip = State: {route.state} on {route.node_hostname} ({route.node_name});\n\n return (\n
  • \n \n S{route.id}\n \n
  • \n );\n }\n}\n\nexport default ShardRouting;\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 PropTypes from 'prop-types';\nimport React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { ShardRouting } from 'components/indices';\n\nconst ShardRoutingWrap = styled.div(({ theme }) => css`\n .shards {\n .shard {\n padding: 10px;\n margin: 5px;\n width: 50px;\n float: left;\n text-align: center;\n }\n\n .shard-started {\n background-color: ${theme.utils.colorLevel(theme.colors.variant.light.success, -2)};\n }\n\n .shard-relocating {\n background-color: ${theme.utils.colorLevel(theme.colors.variant.light.primary, -2)};\n }\n\n .shard-initializing {\n background-color: ${theme.utils.colorLevel(theme.colors.variant.light.warning, -5)};\n }\n\n .shard-unassigned {\n background-color: ${theme.utils.colorLevel(theme.colors.variant.light.default, -2)};\n }\n\n .shard-primary .id {\n font-weight: bold;\n margin-bottom: 3px;\n border-bottom: 1px solid ${theme.colors.gray[10]};\n }\n }\n\n .description {\n font-size: ${theme.fonts.size.small};\n margin-top: 2px;\n margin-left: 6px;\n }\n`);\n\nconst ShardRoutingOverview = ({ indexName, routing }) => {\n return (\n \n

    Shard routing

    \n\n
      \n {routing\n .sort((shard1, shard2) => naturalSort(shard1.id, shard2.id))\n .map((route) => )}\n
    \n
    \n\n
    \n Bold shards are primaries, others are replicas. Replicas are elected to primaries automatically\n when primaries leave the cluster. Size and document counts only reflect primary shards and no\n possible replica duplication.\n
    \n
    \n );\n};\n\nShardRoutingOverview.propTypes = {\n routing: PropTypes.array.isRequired,\n indexName: PropTypes.string.isRequired,\n};\n\nexport default ShardRoutingOverview;\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 Reflux from 'reflux';\nimport PropTypes from 'prop-types';\nimport isArray from 'lodash/isArray';\n\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { qualifyUrl } from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { RetentionStrategyConfig, RotationStrategyConfig } from 'components/indices/Types';\nimport { RetentionStrategyConfigPropType, RotationStrategyConfigPropType } from 'components/indices/Types';\n\nexport const IndexSetPropType = PropTypes.shape({\n can_be_default: PropTypes.bool,\n id: PropTypes.string,\n title: PropTypes.string,\n description: PropTypes.string.isRequired,\n index_prefix: PropTypes.string.isRequired,\n shards: PropTypes.number.isRequired,\n replicas: PropTypes.number.isRequired,\n rotation_strategy_class: PropTypes.string.isRequired,\n rotation_strategy: RotationStrategyConfigPropType.isRequired,\n retention_strategy_class: PropTypes.string.isRequired,\n retention_strategy: RetentionStrategyConfigPropType.isRequired,\n creation_date: PropTypes.string,\n index_analyzer: PropTypes.string.isRequired,\n index_optimization_max_num_segments: PropTypes.number.isRequired,\n index_optimization_disabled: PropTypes.bool.isRequired,\n field_type_refresh_interval: PropTypes.number.isRequired,\n index_template_type: PropTypes.string,\n writable: PropTypes.bool.isRequired,\n default: PropTypes.bool.isRequired,\n});\nexport type IndexSet = {\n can_be_default?: boolean,\n id?: string,\n title: string,\n description: string,\n index_prefix: string,\n shards: number,\n replicas: number,\n rotation_strategy_class: string,\n rotation_strategy: RotationStrategyConfig,\n retention_strategy_class: string,\n retention_strategy: RetentionStrategyConfig\n creation_date?: string,\n index_analyzer: string,\n index_optimization_max_num_segments: number,\n index_optimization_disabled: boolean,\n field_type_refresh_interval: number,\n index_template_type?: string,\n writable: boolean,\n default?: boolean,\n};\n\ntype IndexSetStats = {\n [key: string]: {\n documents: number,\n indices: number,\n size: number,\n },\n}\ntype IndexSetsResponseType = {\n total: number,\n index_sets: Array,\n stats: IndexSetStats,\n};\ntype IndexSetsStoreState = {\n indexSetsCount: number,\n indexSets: Array,\n indexSetStats: IndexSetStats,\n indexSet: IndexSet,\n}\ntype IndexSetsActionsType = {\n list: () => Promise,\n listPaginated: () => Promise,\n get: (indexSetId: string) => Promise,\n update: (indexSet: IndexSet) => Promise,\n create: (indexSet: IndexSet) => Promise,\n delete: () => Promise,\n setDefault: () => Promise,\n stats: () => Promise,\n};\nexport const IndexSetsActions = singletonActions(\n 'core.IndexSets',\n () => Reflux.createActions({\n list: { asyncResult: true },\n listPaginated: { asyncResult: true },\n get: { asyncResult: true },\n update: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n setDefault: { asyncResult: true },\n stats: { asyncResult: true },\n }),\n);\n\nexport const IndexSetsStore = singletonStore(\n 'core.IndexSets',\n () => Reflux.createStore({\n listenables: [IndexSetsActions],\n indexSetsCount: undefined,\n indexSets: undefined,\n indexSetStats: undefined,\n indexSet: undefined,\n\n getInitialState() {\n return {\n indexSetsCount: this.indexSetsCount,\n indexSets: this.indexSets,\n indexSetStats: this.indexSetStats,\n };\n },\n list(stats: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.list(stats).url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response: IndexSetsResponseType) => this.trigger({\n indexSetsCount: response.total,\n indexSets: response.index_sets,\n indexSetStats: response.stats,\n }),\n (error) => {\n UserNotification.error(`Fetching index sets list failed: ${error.message}`,\n 'Could not retrieve index sets.');\n },\n );\n\n IndexSetsActions.list.promise(promise);\n },\n\n listPaginated(skip: number, limit: number, stats: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.listPaginated(skip, limit, stats).url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response: IndexSetsResponseType) => this.trigger({\n indexSetsCount: response.total,\n indexSets: response.index_sets,\n indexSetStats: response.stats,\n }),\n (error) => {\n UserNotification.error(`Fetching index sets list failed: ${this._errorMessage(error)}`,\n 'Could not retrieve index sets.');\n },\n );\n\n IndexSetsActions.listPaginated.promise(promise);\n },\n\n get(indexSetId: string) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.get(indexSetId).url);\n const promise = fetch('GET', url);\n\n promise.then(\n (response: IndexSet) => {\n this.trigger({ indexSet: response });\n\n return response;\n },\n (error) => {\n UserNotification.error(`Fetching index set '${indexSetId}' failed with status: ${this._errorMessage(error)}`, 'Could not retrieve index set.');\n },\n );\n\n IndexSetsActions.get.promise(promise);\n },\n\n update(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.get(indexSet.id).url);\n const promise = fetch('PUT', url, indexSet);\n\n promise.then(\n (response: IndexSet) => {\n UserNotification.success(`Successfully updated index set '${indexSet.title}'`, 'Success');\n this.trigger({ indexSet: response });\n\n return response;\n },\n (error) => {\n UserNotification.error(`Updating index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not update index set.');\n },\n );\n\n IndexSetsActions.update.promise(promise);\n },\n\n create(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.create().url);\n const promise = fetch('POST', url, indexSet);\n\n promise.then(\n (response: IndexSet) => {\n UserNotification.success(`Successfully created index set '${indexSet.title}'`, 'Success');\n this.trigger({ indexSet: response });\n\n return response;\n },\n (error) => {\n UserNotification.error(`Creating index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not create index set.');\n },\n );\n\n IndexSetsActions.create.promise(promise);\n },\n\n delete(indexSet: IndexSet, deleteIndices: boolean) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.delete(indexSet.id, deleteIndices).url);\n const promise = fetch('DELETE', url);\n\n promise.then(\n () => {\n UserNotification.success(`Successfully deleted index set '${indexSet.title}'`, 'Success');\n },\n (error) => {\n UserNotification.error(`Deleting index set '${indexSet.title}' failed with status: ${this._errorMessage(error)}`, 'Could not delete index set.');\n },\n );\n\n IndexSetsActions.delete.promise(promise);\n },\n\n setDefault(indexSet: IndexSet) {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.setDefault(indexSet.id).url);\n const promise = fetch('PUT', url);\n\n promise.then(\n () => {\n UserNotification.success(`Successfully set index set '${indexSet.title}' as default`, 'Success');\n },\n (error) => {\n UserNotification.error(`Setting index set '${indexSet.title}' as default failed with status: ${this._errorMessage(error)}`, 'Could not set default index set.');\n },\n );\n\n IndexSetsActions.setDefault.promise(promise);\n },\n\n stats() {\n const url = qualifyUrl(ApiRoutes.IndexSetsApiController.stats().url);\n const promise = fetch('GET', url);\n\n promise\n .then(\n (response) => this.trigger({\n globalIndexSetStats: {\n indices: response.indices,\n documents: response.documents,\n size: response.size,\n },\n }),\n (error) => {\n UserNotification.error(`Fetching global index stats failed: ${error.message}`,\n 'Could not retrieve global index stats.');\n },\n );\n\n IndexSetsActions.stats.promise(promise);\n },\n\n _errorMessage(error) {\n try {\n if (isArray(error.additional.body)) {\n return error.additional.body.map(({ message, path }) => `${path ?? ''} ${message}.`).join(' ');\n }\n\n return error.additional.body.message;\n } catch (e) {\n return error.message;\n }\n },\n }),\n);\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 Reflux from 'reflux';\n\nimport { qualifyUrl } from 'util/URLUtils';\nimport ApiRoutes from 'routing/ApiRoutes';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport type IndexTimeAndTotalStats = {\n total: number,\n time_seconds: number,\n};\n\nexport type IndexShardRouting = {\n id: number,\n state: string,\n active: boolean,\n primary: boolean,\n node_id: string,\n node_name: string,\n node_hostname: string,\n relocating_to: string | null,\n};\n\nexport type IndexInfo = {\n primary_shards: {\n flush: IndexTimeAndTotalStats,\n get: IndexTimeAndTotalStats,\n index: IndexTimeAndTotalStats,\n merge: IndexTimeAndTotalStats,\n refresh: IndexTimeAndTotalStats,\n search_query: IndexTimeAndTotalStats,\n search_fetch: IndexTimeAndTotalStats,\n open_search_contexts: number,\n store_size_bytes: number,\n segments: number,\n documents: {\n count: number,\n deleted: number,\n },\n },\n all_shards: {\n flush: IndexTimeAndTotalStats,\n get: IndexTimeAndTotalStats,\n index: IndexTimeAndTotalStats,\n merge: IndexTimeAndTotalStats,\n refresh: IndexTimeAndTotalStats,\n search_query: IndexTimeAndTotalStats,\n search_fetch: IndexTimeAndTotalStats,\n open_search_contexts: number,\n store_size_bytes: number,\n segments: number,\n documents: {\n count: number,\n deleted: number,\n },\n },\n routing: Array,\n reopened: boolean,\n};\n\nexport type Indices = {\n [key: string]: IndexInfo,\n};\ntype IndicesListResponse = {\n all: {\n indices: IndexInfo,\n },\n closed: {\n indices: IndexInfo,\n },\n};\n\ntype IndicesActionsType = {\n list: (indexSetId: string) => Promise,\n listAll: () => Promise,\n close: (indexName: string) => Promise,\n delete: (indexName: string) => Promise,\n multiple: () => Promise,\n reopen: () => Promise,\n subscribe: (indexName: string) => Promise,\n unsubscribe: (indexName: string) => Promise,\n}\nexport const IndicesActions = singletonActions(\n 'core.Indices',\n () => Reflux.createActions({\n list: { asyncResult: true },\n listAll: { asyncResult: true },\n close: { asyncResult: true },\n delete: { asyncResult: true },\n multiple: { asyncResult: true },\n reopen: { asyncResult: true },\n subscribe: { asyncResult: false },\n unsubscribe: { asyncResult: false },\n }),\n);\nexport const IndicesStore = singletonStore(\n 'core.Indices',\n () => Reflux.createStore({\n listenables: [IndicesActions],\n indices: undefined,\n closedIndices: undefined,\n registrations: {},\n\n getInitialState() {\n return { indices: this.indices, closedIndices: this.closedIndices };\n },\n\n list(indexSetId: string) {\n const urlList = qualifyUrl(ApiRoutes.IndicesApiController.list(indexSetId).url);\n const promise = fetch('GET', urlList).then((response: IndicesListResponse) => {\n this.indices = response.all.indices;\n this.closedIndices = response.closed.indices;\n this.trigger({ indices: this.indices, closedIndices: this.closedIndices });\n\n return { indices: this.indices, closedIndices: this.closedIndices };\n });\n\n IndicesActions.list.promise(promise);\n },\n\n listAll() {\n const urlList = qualifyUrl(ApiRoutes.IndicesApiController.listAll().url);\n const promise = fetch('GET', urlList).then((response: IndicesListResponse) => {\n this.indices = response.all.indices;\n this.closedIndices = response.closed.indices;\n this.trigger({ indices: this.indices, closedIndices: this.closedIndices });\n\n return { indices: this.indices, closedIndices: this.closedIndices };\n });\n\n IndicesActions.listAll.promise(promise);\n },\n\n multiple() {\n const indexNames = Object.keys(this.registrations);\n\n if (indexNames.length <= 0) {\n return;\n }\n\n const urlList = qualifyUrl(ApiRoutes.IndicesApiController.multiple().url);\n const request = { indices: indexNames };\n const promise = fetch('POST', urlList, request).then((response: Indices) => {\n this.indices = { ...this.indices, ...response };\n this.trigger({ indices: this.indices, closedIndices: this.closedIndices });\n\n return { indices: this.indices, closedIndices: this.closedIndices };\n });\n\n IndicesActions.multiple.promise(promise);\n },\n close(indexName: string) {\n const url = qualifyUrl(ApiRoutes.IndicesApiController.close(indexName).url);\n const promise = fetch('POST', url);\n\n IndicesActions.close.promise(promise);\n },\n delete(indexName: string) {\n const url = qualifyUrl(ApiRoutes.IndicesApiController.delete(indexName).url);\n const promise = fetch('DELETE', url);\n\n IndicesActions.delete.promise(promise);\n },\n reopen(indexName: string) {\n const url = qualifyUrl(ApiRoutes.IndicesApiController.reopen(indexName).url);\n const promise = fetch('POST', url);\n\n IndicesActions.reopen.promise(promise);\n },\n subscribe(indexName: string) {\n this.registrations[indexName] = this.registrations[indexName] ? this.registrations[indexName] + 1 : 1;\n },\n unsubscribe(indexName: string) {\n this.registrations[indexName] = this.registrations[indexName] > 0 ? this.registrations[indexName] - 1 : 0;\n\n if (this.registrations[indexName] === 0) {\n delete this.registrations[indexName];\n }\n },\n }),\n);\n"],"names":["Component","obj","props","result","usePaginationQueryParameter","pageSizes","paginationQueryParameter","PropTypes","max_index_retention_period","SizeBasedRotationStrategyConfigPropType","type","max_size","MessageCountRotationStrategyConfigPropType","max_docs_per_index","TimeBasedRotationStrategyConfigPropType","rotation_period","max_rotation_period","rotate_empty_index_set","RotationStrategyConfigPropType","RetentionStrategyConfigPropType","max_number_of_indices","index_action","JsonSchemaStringPropertyTypePropType","JsonSchemaIndexActionPropertyTypePropType","enum","isRequired","RotationPropertiesPropType","RotationJsonSchemaPropType","id","properties","RetentionPropertiesPropType","RetentionJsonSchemaPropType","RotationStrategyPropType","default_config","json_schema","RetentionStrategyPropType","ClosedIndexDetails","React","IndicesActions","this","indexName","window","confirm","render","indexRange","className","bsStyle","name","style","marginBottom","marginTop","bsSize","onClick","_onReopen","_onDeleteIndex","IndexRangesActions","singletonActions","Reflux","list","asyncResult","recalculate","recalculateIndex","IndexDetails","singletonStore","listenables","indexRanges","undefined","getInitialState","init","url","URLUtils","ApiRoutes","promise","fetch","then","response","ranges","trigger","indexSetId","UserNotification","catch","error","index","isDeflector","useEffect","_onRecalculateIndex","useCallback","_onCloseIndex","actionButtons","useMemo","disabled","all_shards","HideOnCloud","NumberUtils","segments","open_search_contexts","documents","deleted","md","title","shardMeter","primary_shards","routing","propTypes","IndexRangeSummary","RelativeTime","dateTime","calculated_at","took_ms","TIME_BASED_ROTATION_STRATEGY","StyledH3","styled","StyledSelect","Select","StyledAlert","Alert","_getStrategyJsonSchema","selectedStrategy","strategies","filter","s","_getDefaultStrategyConfig","_getStrategyConfig","activeStrategy","activeConfig","timeBasedStrategy","_getTimeBaseStrategyWithElasticLimit","IndexMaintenanceStrategiesConfiguration","description","selectPlaceholder","pluginExports","retentionStrategiesContext","maxRetentionPeriod","strategy","config","getState","newStrategy","setNewStrategy","useState","setValues","values","rotation_strategy_class","rotationStrategyClass","retention_strategy_class","retentionStrategyClass","useFormikContext","_onConfigUpdate","newConfig","configuration","data","copy","_addConfigType","_activeSelection","shouldShowMaxRetentionWarning","labelClassName","wrapperClassName","label","placeholder","options","c","find","map","value","displayName","matchProp","onChange","length","onConfigUpdate","strategyPlugin","exportedStrategy","strategyConfig","element","configComponent","jsonSchema","updateConfig","key","_getConfigurationComponent","defaultProps","MessageCountRotationStrategyConfiguration","maxDocsPerIndex","setMaxDocsPerIndex","field","e","update","getValueFromInput","target","help","required","MessageCountRotationStrategySummary","SizeBasedRotationStrategyConfiguration","maxSize","setMaxSize","addonAfter","SizeBasedRotationStrategySummary","TimeBasedRotationStrategyConfiguration","constructor","super","period","inputs","getValue","toUpperCase","startsWith","setState","_isValidPeriod","rotateEmptyIndexSet","duration","rotationPeriod","rotationLimit","state","check","checkInMilliseconds","moment","asMilliseconds","durationInMilliseconds","_validationLimit","maxRotationPeriodErrorMessage","humanize","maxRotationPeriodHelpText","ref","rotationPeriodRef","_onPeriodUpdate","_formatDuration","_validationState","rotateEmptyIndexSetRef","_onRotateEmptyIndexSetUpdate","checked","TimeBasedRotationStrategySummary","format","_humanizedPeriod","PluginStore","PluginManifest","indexRotationConfig","summaryComponent","DeletionRetentionStrategyConfiguration","maxNumberOfIndices","setMaxNumberOfIndices","DeletionRetentionStrategySummary","ClosingRetentionStrategyConfiguration","ClosingRetentionStrategySummary","indexRetentionConfig","NoopRetentionStrategyConfiguration","NoopRetentionStrategySummary","StyledFormSubmit","FormSubmit","_validateIndexPrefix","indexOf","toLocaleLowerCase","match","_getRotationConfigState","rotation_strategy","_getRetentionConfigState","retention_strategy","IndexSetConfigurationForm","onUpdate","indexSet","fieldTypeRefreshIntervalUnit","rotationStrategies","retentionStrategies","create","cancelLink","indexSetRotationStrategy","indexSetRotationStrategyClass","indexSetRetentionStrategy","IndexSetRetentionStrategyClass","submitButtonText","submitLoadingText","rotationConfig","retentionConfig","readOnlyconfig","indexPrefixHelp","validate","onCancel","history","Formik","onSubmit","_saveConfiguration","initialValues","isValid","setFieldValue","isSubmitting","Form","minLength","Field","as","unit","units","intervalValue","writable","mdOffset","disabledSubmit","isAsyncSubmit","IndexSetDeletionForm","assignedStreams","deleteIndices","StreamsStore","streams","forEach","stream","index_set_id","push","forms","open","close","_isLoading","default","text","_isDeletable","sort","s1","s2","naturalSort","_onRemoveClick","preventDefault","onDelete","BootstrapModalForm","elem","onModalOpen","_onModalOpen","onSubmitForm","_onDelete","submitButtonDisabled","_modalContent","Row","IndexSetDetails","lg","index_prefix","shards","replicas","field_type_refresh_interval","IndexSetsComponent","createReactClass","mixins","IndexSetsStore","componentDidMount","loadData","page","PAGE_SIZE","pageNo","limit","currentPageNo","currentPageSize","IndexSetsActions","_onChangePaginatedList","size","_onSetDefault","_deleteIndexSet","resetPage","_formatIndexSet","indexSetStats","actions","ButtonToolbar","to","Routes","pullRight","onSelect","can_be_default","divider","content","indexSetTitle","isDefault","isReadOnly","statsString","endsWith","stats","_formatStatsString","titleSuffix","contentRow","indices","StringUtils","indexSets","globalIndexSetStats","indexSetsCount","pageSize","totalItems","showPageSizeSelect","bsNoItemsStyle","noItemsText","items","withPaginationQueryParameter","IndexSummary","showDetails","labels","is_deflector","is_closed","is_reopened","Date","sizes","count","events","begin","end","event","_formatLabels","_formatIndexRange","_toggleShowDetails","href","_formatShowDetailsLink","children","IndexSizeSummary","bytes","numeral","DeflectorActions","cycle","deflector","info","IndicesMaintenanceDropdown","cycleButton","eventKey","_onCycleDeflector","_onRecalculateIndexRange","IndicesOverview","indexSummary","range","indexDetails","Object","keys","_formatClosedIndex","_formatIndex","index1","index2","closedIndices","IndexMaintenanceStrategiesSummary","Spinner","IndicesConfiguration","ShardMeter","meter","total","time_seconds","sm","display","_formatMeter","flush","merge","search_query","search_fetch","get","refresh","ShardRouting","route","tooltip","node_hostname","node_name","classNames","primary","placement","overlay","ShardRoutingWrap","theme","css","utils","colorLevel","colors","variant","light","success","warning","gray","fonts","small","ShardRoutingOverview","shard1","shard2","node_id","clear","IndexSetPropType","creation_date","index_analyzer","index_optimization_max_num_segments","index_optimization_disabled","index_template_type","listPaginated","delete","setDefault","qualifyUrl","index_sets","message","skip","_errorMessage","isArray","additional","body","path","join","listAll","multiple","reopen","subscribe","unsubscribe","IndicesStore","registrations","urlList","all","closed","indexNames","request"],"sourceRoot":""}




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy