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

web-interface.assets.6e61897c-8.472622149827c1587209.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"sources":["webpack:///./src/components/support/SmallSupportLink.tsx","webpack:///./src/components/indices/ClosedIndexDetails.jsx","webpack:///./src/components/indices/IndexDetails.tsx","webpack:///./src/components/indices/IndexRangeSummary.jsx","webpack:///./src/components/indices/IndexMaintenanceStrategiesConfiguration.jsx","webpack:///./src/components/indices/rotation/MessageCountRotationStrategyConfiguration.jsx","webpack:///./src/components/indices/rotation/MessageCountRotationStrategySummary.jsx","webpack:///./src/components/indices/rotation/SizeBasedRotationStrategyConfiguration.jsx","webpack:///./src/components/indices/rotation/SizeBasedRotationStrategySummary.jsx","webpack:///./src/components/indices/rotation/TimeBasedRotationStrategyConfiguration.jsx","webpack:///./src/components/indices/rotation/TimeBasedRotationStrategySummary.jsx","webpack:///./src/components/indices/rotation/index.ts","webpack:///./src/components/indices/retention/DeletionRetentionStrategyConfiguration.jsx","webpack:///./src/components/indices/retention/DeletionRetentionStrategySummary.jsx","webpack:///./src/components/indices/retention/ClosingRetentionStrategyConfiguration.jsx","webpack:///./src/components/indices/retention/ClosingRetentionStrategySummary.jsx","webpack:///./src/components/indices/retention/NoopRetentionStrategyConfiguration.jsx","webpack:///./src/components/indices/retention/NoopRetentionStrategySummary.jsx","webpack:///./src/components/indices/retention/index.ts","webpack:///./src/components/indices/IndexSetConfigurationForm.tsx","webpack:///./src/components/indices/IndexSetDeletionForm.jsx","webpack:///./src/components/indices/StyledIndexSetDetailsRow.tsx","webpack:///./src/components/indices/IndexSetDetails.tsx","webpack:///./src/components/indices/IndexSetsComponent.jsx","webpack:///./src/components/indices/IndexSummary.jsx","webpack:///./src/components/indices/IndexSizeSummary.jsx","webpack:///./src/components/indices/IndicesMaintenanceDropdown.jsx","webpack:///./src/components/indices/IndicesOverview.jsx","webpack:///./src/components/indices/IndexMaintenanceStrategiesSummary.jsx","webpack:///./src/components/indices/IndicesConfiguration.jsx","webpack:///./src/components/indices/ShardMeter.jsx","webpack:///./src/components/indices/ShardRouting.jsx","webpack:///./src/components/indices/ShardRoutingOverview.jsx"],"names":["Description","styled","div","IconStack","theme","css","colors","global","textAlt","textDefault","Content","p","SmallSupportLink","children","className","name","type","propTypes","PropTypes","node","isRequired","string","defaultProps","undefined","IndicesActions","ActionsProvider","getActions","ClosedIndexDetails","reopen","props","indexName","window","confirm","indexRange","this","bsStyle","style","marginBottom","marginTop","bsSize","onClick","_onReopen","_onDeleteIndex","React","Component","object","CombinedProvider","get","IndexRangesActions","StoreProvider","getStore","IndexDetails","index","indexSetId","isDeflector","useEffect","subscribe","unsubscribe","all_shards","_onRecalculateIndex","recalculateIndex","then","list","_onCloseIndex","close","HideOnCloud","segments","open_search_contexts","documents","deleted","md","title","shardMeter","primary_shards","routing","disabled","bool","IndexRangeSummary","calculated_at","dateTime","relative","took_ms","TIME_BASED_ROTATION_STRATEGY","IndexMaintenanceStrategiesConfiguration","selectedStrategy","result","strategies","filter","strategy","default_config","json_schema","activeConfig","state","timeBasedStrategy","_getDefaultStrategyConfig","max_rotation_period","activeStrategy","_getTimeBaseStrategyWithElasticLimit","newStrategy","updateState","length","setState","newConfig","_getStrategyConfig","data","s","copy","_addConfigType","pluginExports","config","find","map","value","label","displayName","exportedStrategy","strategyConfig","element","createElement","configComponent","jsonSchema","_getStrategyJsonSchema","updateConfig","_onConfigUpdate","key","description","selectPlaceholder","id","placeholder","options","_availableSelectOptions","matchProp","_activeSelection","onChange","_onSelect","_getConfigurationComponent","array","func","MessageCountRotationStrategyConfiguration","max_docs_per_index","field","e","update","target","_onInputUpdate","help","required","MessageCountRotationStrategySummary","SizeBasedRotationStrategyConfiguration","max_size","NumberUtils","formatBytes","addonAfter","_formatSize","SizeBasedRotationStrategySummary","TimeBasedRotationStrategyConfiguration","period","inputs","getValue","toUpperCase","startsWith","_isValidPeriod","durationInMilliseconds","rotationLimit","moment","duration","asMilliseconds","rotationPeriod","rotation_period","check","checkInMilliseconds","_validationLimit","maxRotationPeriodErrorMessage","humanize","maxRotationPeriodHelpText","ref","rotationPeriodRef","_onPeriodUpdate","_formatDuration","_validationState","TimeBasedRotationStrategySummary","format","_humanizedPeriod","PluginStore","register","PluginManifest","indexRotationConfig","summaryComponent","DeletionRetentionStrategyConfiguration","max_number_of_indices","DeletionRetentionStrategySummary","ClosingRetentionStrategyConfiguration","ClosingRetentionStrategySummary","NoopRetentionStrategyConfiguration","NoopRetentionStrategySummary","indexRetentionConfig","IndexSetConfigurationForm","fieldName","lodash","cloneDeep","indexSet","event","validationErrors","match","nextValidationErrors","indexOf","toLowerCase","_onInputChange","_updateConfig","checked","preventDefault","onUpdate","invalidFields","Object","keys","document","getElementsByName","focus","unit","fieldTypeRefreshIntervalUnit","rotationConfig","retentionConfig","readOnlyconfig","rotationStrategies","retentionStrategies","create","cancelLink","indexSetRotationStrategy","rotation_strategy","indexSetRotationStrategyClass","rotation_strategy_class","indexSetRetentionStrategy","retention_strategy","IndexSetRetentionStrategyClass","retention_strategy_class","exports","_updateRotationConfigState","_updateRetentionConfigState","indexPrefixHelp","_validateIndexPrefix","index_prefix","index_analyzer","onSubmit","_saveConfiguration","autoFocus","shards","replicas","min","index_optimization_max_num_segments","_onDisableOptimizationClick","index_optimization_disabled","field_type_refresh_interval","as","units","_onFieldTypeRefreshIntervalChange","writable","marginRight","to","StreamsStore","IndexSetDeletionForm","assignedStreams","deleteIndices","load","streams","forEach","stream","index_set_id","push","forms","open","_isLoading","text","_isDeletable","sort","s1","s2","naturalSort","_onRemoveClick","onDelete","BootstrapModalForm","elem","onModalOpen","_onModalOpen","onSubmitForm","_onDelete","submitButtonText","submitButtonDisabled","_modalContent","StyledIndexSetDetailsRow","Row","IndexSetDetails","lg","IndexSetsStore","IndexSetsActions","IndexSetsComponent","createReactClass","mixins","Reflux","connect","componentDidMount","loadData","PAGE_SIZE","pageNo","limit","currentPageNo","currentPageSize","listPaginated","stats","_onChangePaginatedList","page","size","_onSetDefault","setDefault","_deleteIndexSet","_formatIndexSet","statsString","indexSetStats","actions","Routes","SYSTEM","INDEX_SETS","CONFIGURATION","pullRight","onSelect","can_be_default","divider","content","indexSetTitle","SHOW","isDefault","isReadOnly","endsWith","_formatStatsString","titleSuffix","contentRow","indices","formatNumber","StringUtils","pluralize","indexSets","render","globalIndexSetStats","indexSetsCount","pageSize","totalItems","showPageSizeSelect","bsNoItemsStyle","noItemsText","items","IndexSummary","showDetails","labels","is_deflector","is_closed","is_reopened","DateTime","toISOString","sizes","count","events","begin","end","_formatLabels","_formatIndexRange","_toggleShowDetails","href","_formatShowDetailsLink","IndexSizeSummary","bytes","numeral","DeflectorActions","IndicesMaintenanceDropdown","recalculate","cycle","cycleButton","eventKey","_onCycleDeflector","_onRecalculateIndexRange","IndicesOverview","indexSummary","range","indexDetails","_formatClosedIndex","_formatIndex","index1","index2","closedIndices","deflector","IndexMaintenanceStrategiesSummary","Spinner","IndicesConfiguration","ShardMeter","meter","total","time_seconds","sm","display","_formatMeter","flush","merge","search_query","search_fetch","refresh","ShardRouting","route","tooltip","node_hostname","node_name","classNames","primary","placement","overlay","ShardRoutingWrap","utils","colorLevel","variant","light","success","warning","gray","fonts","small","ShardRoutingOverview","shard1","shard2","node_id","clear"],"mappings":"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","file":"6e61897c-8.472622149827c1587209.js","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 PropTypes from 'prop-types';\nimport * as React from 'react';\nimport styled, { css } from 'styled-components';\n\nimport { Icon } from 'components/common';\n\ntype Props = {\n  children: React.ReactNode,\n  className?: string,\n};\n\nconst Description = styled.div`\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n`;\n\nconst IconStack = styled.div(({ theme }) => css`\n  position: relative;\n  min-width: 2.5em;\n  \n  .fa-stack-1x {\n    color: ${theme.colors.global.textAlt};\n  }\n  \n  .fa-stack-2x {\n    color: ${theme.colors.global.textDefault};\n  }\n`);\n\nconst Content = styled.p`\n  font-weight: bold;\n  margin: 0;\n`;\n\nconst SmallSupportLink = ({ children, className }: Props) => {\n  return (\n    \n      \n        \n        \n      \n\n      \n        {children}\n      \n    \n  );\n};\n\nSmallSupportLink.propTypes = {\n  children: PropTypes.node.isRequired,\n  className: PropTypes.string,\n};\n\nSmallSupportLink.defaultProps = {\n  className: undefined,\n};\n\nexport default SmallSupportLink;\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 ActionsProvider from 'injection/ActionsProvider';\nimport { Alert, Button } from 'components/graylog';\nimport { Icon } from 'components/common';\nimport { IndexRangeSummary } from 'components/indices';\n\nconst IndicesActions = ActionsProvider.getActions('Indices');\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 PropTypes from 'prop-types';\nimport React, { useEffect } from 'react';\n\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport { Col, Row, Button } from 'components/graylog';\nimport { Spinner } from 'components/common';\nimport StoreProvider from 'injection/StoreProvider'; // To make IndexRangesActions work.\nimport { IndexRangeSummary, ShardMeter, ShardRoutingOverview } from 'components/indices';\nimport type { IndexInfo } from 'stores/indices/IndicesStore';\nimport type { IndexRange } from 'stores/indices/IndexRangesStore';\nimport CombinedProvider from 'injection/CombinedProvider';\n\ntype Props = {\n index: IndexInfo,\n indexName: string,\n indexRange: IndexRange,\n indexSetId: string,\n isDeflector: boolean,\n};\n\nconst { IndicesActions } = CombinedProvider.get('Indices');\nconst { IndexRangesActions } = CombinedProvider.get('IndexRanges');\n\nStoreProvider.getStore('IndexRanges');\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 if (!index || !index.all_shards) {\n return ;\n }\n\n const _onRecalculateIndex = () => {\n if (window.confirm(`Really recalculate the index ranges for index ${indexName}?`)) {\n IndexRangesActions.recalculateIndex(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n };\n\n const _onCloseIndex = () => {\n if (window.confirm(`Really close index ${indexName}?`)) {\n IndicesActions.close(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n };\n\n const _onDeleteIndex = () => {\n if (window.confirm(`Really delete index ${indexName}?`)) {\n IndicesActions.delete(indexName).then(() => {\n IndicesActions.list(indexSetId);\n });\n }\n };\n\n const _formatActionButtons = () => {\n if (isDeflector) {\n return (\n \n {' '}\n \n \n );\n }\n\n return (\n \n {' '}\n {' '}\n \n \n );\n };\n\n return (\n
\n {' '}\n\n \n {index.all_shards.segments} segments,{' '}\n {index.all_shards.open_search_contexts} open search contexts,{' '}\n {index.all_shards.documents.deleted} deleted messages\n \n \n \n \n \n \n \n \n \n \n
\n\n {_formatActionButtons()}\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 { Timestamp } from 'components/common';\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 React from 'react';\n\nimport { Input } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\nconst TIME_BASED_ROTATION_STRATEGY = 'org.graylog2.indexer.rotation.strategies.TimeBasedRotationStrategy';\n\nclass IndexMaintenanceStrategiesConfiguration extends React.Component {\n static 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 activeConfig: PropTypes.object.isRequired,\n updateState: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n const { activeConfig: { strategy, config } } = this.props;\n\n this.state = {\n activeStrategy: strategy,\n activeConfig: config,\n newStrategy: strategy,\n };\n }\n\n _getDefaultStrategyConfig = (selectedStrategy) => {\n const { strategies } = this.props;\n const result = strategies.filter((strategy) => strategy.type === selectedStrategy)[0];\n\n return result ? result.default_config : undefined;\n };\n\n _getStrategyJsonSchema = (selectedStrategy) => {\n const { strategies } = this.props;\n const result = strategies.filter((strategy) => strategy.type === selectedStrategy)[0];\n\n return result ? result.json_schema : undefined;\n };\n\n _getTimeBaseStrategyWithElasticLimit = () => {\n const { activeConfig } = this.state;\n const timeBasedStrategy = this._getDefaultStrategyConfig(TIME_BASED_ROTATION_STRATEGY);\n\n return { ...activeConfig, max_rotation_period: timeBasedStrategy?.max_rotation_period };\n }\n\n _getStrategyConfig = (selectedStrategy) => {\n const { activeStrategy, activeConfig } = this.state;\n\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 ? this._getTimeBaseStrategyWithElasticLimit() : 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 this._getDefaultStrategyConfig(selectedStrategy);\n };\n\n _onSelect = (newStrategy) => {\n const { updateState } = this.props;\n\n if (!newStrategy || newStrategy.length < 1) {\n this.setState({ newStrategy: undefined });\n\n return;\n }\n\n const newConfig = this._getStrategyConfig(newStrategy);\n\n this.setState({ newStrategy: newStrategy });\n updateState(newStrategy, newConfig);\n };\n\n _addConfigType = (strategy, data) => {\n const { strategies } = this.props;\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 === strategy)[0];\n const copy = data;\n\n if (result) {\n copy.type = result.default_config.type;\n }\n\n return copy;\n };\n\n _onConfigUpdate = (newConfig) => {\n const { newStrategy } = this.state;\n const { updateState } = this.props;\n const config = this._addConfigType(newStrategy, newConfig);\n\n updateState(newStrategy, config);\n };\n\n _availableSelectOptions = () => {\n const { pluginExports, strategies } = this.props;\n\n return pluginExports\n .filter((config) => strategies.find(({ type }) => type === config.type))\n .map((config) => {\n return { value: config.type, label: config.displayName };\n });\n };\n\n _getConfigurationComponent = (selectedStrategy) => {\n const { pluginExports } = this.props;\n\n if (!selectedStrategy || selectedStrategy.length < 1) {\n return null;\n }\n\n const strategy = pluginExports.filter((exportedStrategy) => exportedStrategy.type === selectedStrategy)[0];\n\n if (!strategy) {\n return null;\n }\n\n const strategyConfig = this._getStrategyConfig(selectedStrategy);\n const element = React.createElement(strategy.configComponent, {\n config: strategyConfig,\n jsonSchema: this._getStrategyJsonSchema(selectedStrategy),\n updateConfig: this._onConfigUpdate,\n });\n\n return ({element});\n };\n\n _activeSelection = () => {\n const { newStrategy } = this.state;\n\n return newStrategy;\n };\n\n render() {\n const { title, description, selectPlaceholder } = this.props;\n\n return (\n \n

{title}

\n

{description}

\n \n \n \n
\n );\n }\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\nclass MessageCountRotationStrategySummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n };\n\n render() {\n return (\n
\n
\n
Index rotation strategy:
\n
Message Count
\n
Max docs per index:
\n
{this.props.config.max_docs_per_index}
\n
\n
\n );\n }\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 React from 'react';\n\nimport { Input } from 'components/bootstrap';\nimport NumberUtils from 'util/NumberUtils';\n\nclass SizeBasedRotationStrategyConfiguration extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n jsonSchema: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n };\n\n state = {\n max_size: this.props.config.max_size,\n };\n\n _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n\n update[field] = e.target.value;\n\n this.setState(update);\n this.props.updateConfig(update);\n };\n };\n\n _formatSize = () => {\n return NumberUtils.formatBytes(this.state.max_size);\n };\n\n render() {\n return (\n
\n
\n \n
\n
\n );\n }\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\nclass SizeBasedRotationStrategySummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n };\n\n render() {\n return (\n
\n
\n
Index rotation strategy:
\n
Index Size
\n
Max index size:
\n
{this.props.config.max_size} bytes ({NumberUtils.formatBytes(this.props.config.max_size)})
\n
\n
\n );\n }\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\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 { config: { rotation_period: rotationPeriod } } = this.props;\n\n const { config: { max_rotation_period: rotationLimit } } = this.props;\n\n this.state = {\n rotation_period: rotationPeriod,\n rotationLimit,\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 _validationLimit = (durationInMilliseconds, rotationLimit) => {\n return durationInMilliseconds <= moment.duration(rotationLimit).asMilliseconds();\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 ? this._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 { rotation_period: rotationPeriod, rotationLimit } = 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 );\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 React from 'react';\n\nimport { Input } from 'components/bootstrap';\n\nclass DeletionRetentionStrategyConfiguration extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n jsonSchema: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n };\n\n state = {\n max_number_of_indices: this.props.config.max_number_of_indices,\n };\n\n _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n\n update[field] = e.target.value;\n\n this.setState(update);\n this.props.updateConfig(update);\n };\n };\n\n render() {\n return (\n
\n
\n Maximum number of indices to keep before deleting the oldest ones}\n required />\n
\n
\n );\n }\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\nclass DeletionRetentionStrategySummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n };\n\n render() {\n return (\n
\n
\n
Index retention strategy:
\n
Delete
\n
Max number of indices:
\n
{this.props.config.max_number_of_indices}
\n
\n
\n );\n }\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 React from 'react';\n\nimport { Input } from 'components/bootstrap';\n\nclass ClosingRetentionStrategyConfiguration extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n jsonSchema: PropTypes.object.isRequired,\n updateConfig: PropTypes.func.isRequired,\n };\n\n state = {\n max_number_of_indices: this.props.config.max_number_of_indices,\n };\n\n _onInputUpdate = (field) => {\n return (e) => {\n const update = {};\n\n update[field] = e.target.value;\n\n this.setState(update);\n this.props.updateConfig(update);\n };\n };\n\n render() {\n return (\n
\n
\n Maximum number of indices to keep before closing the oldest ones}\n required />\n
\n
\n );\n }\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\nclass ClosingRetentionStrategySummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n };\n\n render() {\n return (\n
\n
\n
Index retention strategy:
\n
Close
\n
Max number of indices:
\n
{this.props.config.max_number_of_indices}
\n
\n
\n );\n }\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';\n\nimport { Alert } from 'components/graylog';\n\nclass NoopRetentionStrategyConfiguration extends React.Component {\n render() {\n return (\n \n This retention strategy is not configurable because it does not do anything.\n \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\nclass NoopRetentionStrategySummary extends React.Component {\n render() {\n return (\n
\n
\n
Index retention strategy:
\n
Do nothing
\n
\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 lodash from 'lodash';\nimport { PluginStore } from 'graylog-web-plugin/plugin';\n\nimport HideOnCloud from 'util/conditional/HideOnCloud';\nimport { LinkContainer } from 'components/graylog/router';\nimport { Col, Row, Button } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport { Spinner, TimeUnitInput } from 'components/common';\nimport IndexMaintenanceStrategiesConfiguration from 'components/indices/IndexMaintenanceStrategiesConfiguration';\nimport 'components/indices/rotation';\nimport 'components/indices/retention';\nimport type { IndexSet } from 'components/indices/Types';\n\ntype Props = {\n indexSet: IndexSet,\n rotationStrategies: Array,\n retentionStrategies: Array,\n create: boolean,\n onUpdate: (indexSet: IndexSet) => void,\n cancelLink: string,\n};\n\ntype Unit = 'seconds' | 'minutes';\n\ntype State = {\n indexSet: IndexSet,\n fieldTypeRefreshIntervalUnit: Unit,\n validationErrors: {\n [key: string]: string,\n },\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 create: PropTypes.bool,\n onUpdate: PropTypes.func.isRequired,\n cancelLink: 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 validationErrors: {},\n };\n }\n\n _updateConfig = (fieldName: string, value: (string | boolean | number)) => {\n // Use `setState()` with updater function so consecutive calls to `_updateConfig()` always refer to the state\n // at the time the change is applied, resulting in all different keys of the object being updated.\n this.setState((state) => {\n const config = lodash.cloneDeep(state.indexSet);\n\n config[fieldName] = value;\n\n return { indexSet: config };\n });\n };\n\n _validateIndexPrefix = (event: React.ChangeEvent) => {\n const { value } = event.target;\n const { validationErrors } = this.state;\n\n if (value.match(/^[a-z0-9][a-z0-9_\\-+]*$/)) {\n if (validationErrors[event.target.name]) {\n const nextValidationErrors = { ...validationErrors };\n\n delete nextValidationErrors[event.target.name];\n this.setState({ validationErrors: nextValidationErrors });\n }\n } else {\n const nextValidationErrors = { ...validationErrors };\n\n if (value.length === 0) {\n nextValidationErrors[event.target.name] = 'Invalid index prefix: cannot be empty';\n } else if (value.indexOf('_') === 0 || value.indexOf('-') === 0 || value.indexOf('+') === 0) {\n nextValidationErrors[event.target.name] = 'Invalid index prefix: must start with a letter or number';\n } else if (value.toLowerCase() !== value) {\n nextValidationErrors[event.target.name] = 'Invalid index prefix: must be lower case';\n } else {\n nextValidationErrors[event.target.name] = 'Invalid index prefix: must only contain letters, numbers, \\'_\\', \\'-\\' and \\'+\\'';\n }\n\n this.setState({ validationErrors: nextValidationErrors });\n }\n\n this._onInputChange(event);\n };\n\n _onInputChange = (event: React.ChangeEvent) => {\n this._updateConfig(event.target.name, event.target.value);\n };\n\n _onDisableOptimizationClick = (event: React.ChangeEvent) => {\n this._updateConfig(event.target.name, event.target.checked);\n };\n\n _saveConfiguration = (event: React.FormEvent) => {\n event.preventDefault();\n const { indexSet, validationErrors } = this.state;\n const { onUpdate } = this.props;\n const invalidFields = Object.keys(validationErrors);\n\n if (invalidFields.length !== 0) {\n document.getElementsByName(invalidFields[0])[0].focus();\n\n return;\n }\n\n onUpdate(indexSet);\n };\n\n _updateRotationConfigState = (strategy: string, data: string) => {\n this._updateConfig('rotation_strategy_class', strategy);\n this._updateConfig('rotation_strategy', data);\n };\n\n _updateRetentionConfigState = (strategy: string, data: string) => {\n this._updateConfig('retention_strategy_class', strategy);\n this._updateConfig('retention_strategy', data);\n };\n\n _onFieldTypeRefreshIntervalChange = (value: number, unit: Unit) => {\n this._updateConfig('field_type_refresh_interval', moment.duration(value, unit).asMilliseconds());\n this.setState({ fieldTypeRefreshIntervalUnit: unit });\n };\n\n render() {\n const { indexSet, fieldTypeRefreshIntervalUnit } = this.state;\n const { validationErrors } = 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 } = 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 return (\n \n \n
\n \n \n \n \n {readOnlyconfig}\n \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';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { Alert, Row, Col } from 'components/graylog';\nimport { Input } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport BootstrapModalForm from 'components/bootstrap/BootstrapModalForm';\nimport CombinedProvider from 'injection/CombinedProvider';\n\nconst { StreamsStore } = CombinedProvider.get('Streams');\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/graylog';\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/graylog';\nimport { IndicesConfiguration } from 'components/indices';\n\nimport StyledIndexSetDetailsRow from './StyledIndexSetDetailsRow';\nimport { IndexSet } from './Types';\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';\n// eslint-disable-next-line no-restricted-imports\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\n\nimport { Link, LinkContainer } from 'components/graylog/router';\nimport { Button, Col, DropdownButton, Label, MenuItem } from 'components/graylog';\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 CombinedProvider from 'injection/CombinedProvider';\n\nconst { IndexSetsStore, IndexSetsActions } = CombinedProvider.get('IndexSets');\n\nconst IndexSetsComponent = createReactClass({\n displayName: 'IndexSetsComponent',\n mixins: [Reflux.connect(IndexSetsStore)],\n\n componentDidMount() {\n this.loadData(1, 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 IndexSetsActions.delete(indexSet, deleteIndices).then(() => {\n this.loadData(1, this.PAGE_SIZE);\n });\n },\n\n _formatIndexSet(indexSet) {\n const { indexSetStats } = this.state;\n\n const actions = (\n
    \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 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/graylog';\nimport { Timestamp, Icon } from 'components/common';\nimport DateTime from 'logic/datetimes/DateTime';\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 PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { ButtonGroup, DropdownButton, MenuItem } from 'components/graylog';\nimport ActionsProvider from 'injection/ActionsProvider';\nimport StoreProvider from 'injection/StoreProvider';\n\nconst DeflectorActions = ActionsProvider.getActions('Deflector');\nconst IndexRangesActions = ActionsProvider.getActions('IndexRanges');\nconst DeflectorStore = StoreProvider.getStore('Deflector'); // eslint-disable-line no-unused-vars\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 IndexRangesActions.recalculate(this.props.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 DeflectorActions.cycle(this.props.indexSetId).then(() => {\n DeflectorActions.list(this.props.indexSetId);\n });\n }\n };\n\n render() {\n let cycleButton;\n\n if (this.props.indexSet && this.props.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';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { Col, Row } from 'components/graylog';\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/graylog';\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/graylog';\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, Tooltip } from 'components/graylog';\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';\nimport naturalSort from 'javascript-natural-sort';\n\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"],"sourceRoot":""}




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy