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

web-interface.assets.b999a7e7-64.9472d5d0a285679cf68d.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"sources":["webpack:///./src/components/indexers/IndexerClusterHealth.jsx","webpack:///./src/components/indexers/IndexerClusterHealthSummary.jsx","webpack:///./src/components/indexers/IndexerFailure.jsx","webpack:///./src/components/indexers/IndexerFailuresComponent.jsx","webpack:///./src/components/indexers/IndexerFailuresList.jsx","webpack:///./src/components/indexers/index.jsx","webpack:///./src/pages/IndexSetPage.jsx"],"names":["IndexerClusterStore","StoreProvider","getStore","IndexerClusterHealth","createReactClass","displayName","mixins","Reflux","connect","componentDidMount","update","render","content","health","this","state","className","md","page","DocsHelper","PAGES","CONFIGURING_ES","text","ESClusterStatus","styled","Alert","IndexerClusterHealthSummary","status","props","bsStyle","_alertClassForHealth","name","_iconNameForHealth","_formatTextForHealth","shards","active","initializing","relocating","unassigned","CLUSTER_STATUS_EXPLAINED","React","Component","PropTypes","object","isRequired","IndexerFailure","failure","title","timestamp","dateTime","relative","index","letter_id","message","IndexerFailuresStore","IndexerFailuresComponent","total","_iconForFailureCount","_formatTextForFailureCount","to","Routes","SYSTEM","INDICES","FAILURES","bsSize","count","numeral","format","since","moment","subtract","then","response","setState","undefined","_formatFailuresSummary","INDEXER_FAILURES","IndexerFailuresList","failures","length","striped","hover","condensed","style","width","map","key","arrayOf","CombinedProvider","get","IndexSetsStore","IndexSetsActions","IndicesStore","IndicesActions","IndexerOverviewStore","IndexerOverviewActions","IndexSetPage","propTypes","params","getInitialState","indexSet","indexSetId","list","timerId","setInterval","multiple","REFRESH_INTERVAL","componentWillUnmount","clearInterval","_totalIndexCount","Object","keys","indexerOverview","indices","_renderElasticsearchUnavailableInformation","mdOffset","header","_isLoading","indicesInfo","indicesOverview","pageHeader","INDEX_MODEL","LIST","INDEX_SETS","CONFIGURATION","id","indexerOverviewError","indexDetails","closedIndices","deflectorInfo","deflector","marginTop","counts","events","current_target","indexer_cluster"],"mappings":"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","file":"b999a7e7-64.9472d5d0a285679cf68d.js","sourcesContent":["import React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport { Row, Col } from 'components/graylog';\n\nimport StoreProvider from 'injection/StoreProvider';\n\nimport { Spinner } from 'components/common';\nimport { DocumentationLink, SmallSupportLink } from 'components/support';\nimport DocsHelper from 'util/DocsHelper';\nimport { IndexerClusterHealthSummary } from 'components/indexers';\n\nconst IndexerClusterStore = StoreProvider.getStore('IndexerCluster');\n\nconst IndexerClusterHealth = createReactClass({\n  displayName: 'IndexerClusterHealth',\n  mixins: [Reflux.connect(IndexerClusterStore)],\n\n  componentDidMount() {\n    IndexerClusterStore.update();\n  },\n\n  render() {\n    const { health } = this.state;\n\n    let content;\n    if (health) {\n      content = ;\n    } else {\n      content = ;\n    }\n\n    return (\n      \n        \n          

Elasticsearch cluster

\n\n \n The possible Elasticsearch cluster states and more related information is available in the{' '}\n .\n \n\n {content}\n \n
\n );\n },\n});\n\nexport default IndexerClusterHealth;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport styled from 'styled-components';\n\nimport { Alert } from 'components/graylog';\nimport { Icon } from 'components/common';\nimport { DocumentationLink } from 'components/support';\nimport DocsHelper from 'util/DocsHelper';\n\nconst ESClusterStatus = styled(Alert)`\n margin-top: 10px;\n margin-bottom: 5px;\n`;\n\nclass IndexerClusterHealthSummary extends React.Component {\n static propTypes = {\n health: PropTypes.object.isRequired,\n };\n\n _alertClassForHealth = (health) => {\n switch (health.status) {\n case 'green': return 'success';\n case 'yellow': return 'warning';\n case 'red': return 'danger';\n default: return 'success';\n }\n };\n\n _formatTextForHealth = (health) => {\n const text = `Elasticsearch cluster is ${health.status}.`;\n switch (health.status) {\n case 'green': return text;\n case 'yellow':\n case 'red': return {text};\n default: return text;\n }\n };\n\n _iconNameForHealth = (health) => {\n switch (health.status) {\n case 'green': return 'check-circle';\n case 'yellow': return 'warning';\n case 'red': return 'ambulance';\n default: return 'check-circle';\n }\n };\n\n render() {\n const { health } = this.props;\n return (\n \n  {this._formatTextForHealth(health)}{' '}\n Shards:{' '}\n {health.shards.active} active,{' '}\n {health.shards.initializing} initializing,{' '}\n {health.shards.relocating} relocating,{' '}\n {health.shards.unassigned} unassigned,{' '}\n \n \n );\n }\n}\n\nexport default IndexerClusterHealthSummary;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Timestamp } from 'components/common';\n\nclass IndexerFailure extends React.Component {\n static propTypes = {\n failure: PropTypes.object.isRequired,\n };\n\n render() {\n const { failure } = this.props;\n return (\n \n \n {failure.index}\n {failure.letter_id}\n {failure.message}\n \n );\n }\n}\n\nexport default IndexerFailure;\n","import React from 'react';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport numeral from 'numeral';\nimport moment from 'moment';\n\nimport { Alert, Col, Row, Button } from 'components/graylog';\nimport { Icon, Spinner } from 'components/common';\nimport StoreProvider from 'injection/StoreProvider';\nimport DocsHelper from 'util/DocsHelper';\nimport Routes from 'routing/Routes';\n\nimport { SmallSupportLink, DocumentationLink } from 'components/support';\n\nconst IndexerFailuresStore = StoreProvider.getStore('IndexerFailures');\n\nclass IndexerFailuresComponent extends React.Component {\n state = {};\n\n componentDidMount() {\n const since = moment().subtract(24, 'hours');\n\n IndexerFailuresStore.count(since).then((response) => {\n this.setState({ total: response.count });\n });\n }\n\n _formatFailuresSummary = () => {\n return (\n \n {this._formatTextForFailureCount(this.state.total)}\n\n \n \n \n \n );\n };\n\n _formatTextForFailureCount = (count) => {\n if (count === 0) {\n return 'No failed indexing attempts in the last 24 hours.';\n }\n return There were {numeral(count).format('0,0')} failed indexing attempts in the last 24 hours.;\n };\n\n _iconForFailureCount = (count) => {\n if (count === 0) {\n return 'check-circle';\n }\n return 'ambulance';\n };\n\n render() {\n let content;\n if (this.state.total === undefined) {\n content = ;\n } else {\n content = this._formatFailuresSummary();\n }\n\n return (\n \n \n

Indexer failures

\n\n \n Every message that was not successfully indexed will be logged as an indexer failure. You can learn more about this feature in the{' '}\n .\n \n\n {content}\n \n
\n );\n }\n}\n\nexport default IndexerFailuresComponent;\n","import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { Alert, Table } from 'components/graylog';\nimport { Icon } from 'components/common';\nimport { IndexerFailure } from 'components/indexers';\n\nclass IndexerFailuresList extends React.Component {\n static propTypes = {\n failures: PropTypes.arrayOf(PropTypes.object).isRequired,\n };\n\n render() {\n if (this.props.failures.length === 0) {\n return (\n Hurray! There are not any indexer failures.\n );\n }\n\n return (\n
\n \n \n \n \n \n \n \n \n \n \n {this.props.failures.map((failure) => )}\n \n
TimestampIndexLetter IDError message
\n
\n );\n }\n}\n\nexport default IndexerFailuresList;\n","export { default as IndexerClusterHealth } from './IndexerClusterHealth';\nexport { default as IndexerClusterHealthSummary } from './IndexerClusterHealthSummary';\nexport { default as IndexerFailure } from './IndexerFailure';\nexport { default as IndexerFailuresComponent } from './IndexerFailuresComponent';\nexport { default as IndexerFailuresList } from './IndexerFailuresList';\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport createReactClass from 'create-react-class';\nimport Reflux from 'reflux';\nimport { LinkContainer } from 'react-router-bootstrap';\nimport numeral from 'numeral';\n\nimport { Alert, Row, Col, Panel, Button } from 'components/graylog';\nimport { DocumentTitle, PageHeader, Spinner, Icon } from 'components/common';\nimport { IndicesMaintenanceDropdown, IndicesOverview, IndexSetDetails } from 'components/indices';\nimport { IndexerClusterHealthSummary } from 'components/indexers';\nimport { DocumentationLink } from 'components/support';\n\nimport DocsHelper from 'util/DocsHelper';\n\nimport CombinedProvider from 'injection/CombinedProvider';\n\nimport Routes from 'routing/Routes';\n\nconst { IndexSetsStore, IndexSetsActions } = CombinedProvider.get('IndexSets');\nconst { IndicesStore, IndicesActions } = CombinedProvider.get('Indices');\nconst { IndexerOverviewStore, IndexerOverviewActions } = CombinedProvider.get('IndexerOverview');\n\nconst IndexSetPage = createReactClass({\n displayName: 'IndexSetPage',\n\n propTypes: {\n params: PropTypes.object.isRequired,\n },\n\n mixins: [\n Reflux.connect(IndexSetsStore),\n Reflux.connect(IndicesStore, 'indexDetails'),\n Reflux.connect(IndexerOverviewStore),\n ],\n\n getInitialState() {\n return {\n indexSet: undefined,\n };\n },\n\n componentDidMount() {\n IndexSetsActions.get(this.props.params.indexSetId);\n IndicesActions.list(this.props.params.indexSetId);\n\n this.timerId = setInterval(() => {\n IndicesActions.multiple();\n IndexerOverviewActions.list(this.props.params.indexSetId);\n }, this.REFRESH_INTERVAL);\n },\n\n componentWillUnmount() {\n if (this.timerId) {\n clearInterval(this.timerId);\n }\n },\n\n REFRESH_INTERVAL: 2000,\n\n _totalIndexCount() {\n return Object.keys(this.state.indexerOverview.indices).length;\n },\n\n _renderElasticsearchUnavailableInformation() {\n return (\n \n \n
\n Indices overview unavailable}>\n

\n We could not get the indices overview information. This usually means there was a problem\n connecting to Elasticsearch, and you should ensure Elasticsearch is up and reachable from\n Graylog\n .\n

\n

\n Graylog will continue storing your messages in its journal, but you will not be able to search on them\n until Elasticsearch is reachable again.\n

\n
\n
\n \n
\n );\n },\n\n _isLoading() {\n return !this.state.indexSet;\n },\n\n render() {\n if (this._isLoading()) {\n return ;\n }\n\n const { indexSet } = this.state;\n\n const pageHeader = (\n \n \n This is an overview of all indices (message stores) in this index set Graylog is currently taking in account\n for searches and analysis.\n \n\n \n You can learn more about the index model in the{' '}\n \n \n\n \n \n \n \n  \n \n \n \n  \n \n \n \n );\n\n if (this.state.indexerOverviewError) {\n return (\n \n {pageHeader}\n {this._renderElasticsearchUnavailableInformation()}\n \n );\n }\n\n let indicesInfo;\n let indicesOverview;\n if (this.state.indexerOverview && this.state.indexDetails.closedIndices) {\n const deflectorInfo = this.state.indexerOverview.deflector;\n\n indicesInfo = (\n \n \n  {this._totalIndexCount()} indices with a total of{' '}\n {numeral(this.state.indexerOverview.counts.events).format('0,0')} messages under management,\n current write-active index is {deflectorInfo.current_target}.\n \n \n \n );\n indicesOverview = (\n \n );\n } else {\n indicesInfo = ;\n indicesOverview = ;\n }\n\n return (\n \n
\n {pageHeader}\n\n \n \n \n \n \n\n \n \n {indicesInfo}\n \n \n\n {indicesOverview}\n
\n
\n );\n },\n});\n\nexport default IndexSetPage;\n"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy