Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
web-interface.assets.53.7274e9222d07ea893176.js.map Maven / Gradle / Ivy
{"version":3,"sources":["webpack:///53.7274e9222d07ea893176.js","webpack:///./src/pages/SearchPage.jsx"],"names":["webpackJsonp","1326","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_propTypes","_propTypes2","_react","_react2","_reflux","_reflux2","_immutable","_immutable2","_moment","_moment2","_CombinedProvider","_CombinedProvider2","_common","_search","_CombinedProvider$get","get","NodesStore","NodesActions","_CombinedProvider$get2","CurrentUserStore","_CombinedProvider$get3","InputsStore","InputsActions","_CombinedProvider$get4","MessageFieldsStore","_CombinedProvider$get5","RefreshStore","_CombinedProvider$get6","StreamsStore","_CombinedProvider$get7","UniversalSearchStore","_CombinedProvider$get8","SearchStore","_CombinedProvider$get9","DecoratorsStore","SearchPage","createClass","displayName","propTypes","location","object","isRequired","searchConfig","searchInStream","forceFetch","bool","mixins","connect","listenTo","getInitialState","error","undefined","updatingSearch","updatingHistogram","componentDidMount","_this","this","list","triggerPromise","listStreams","then","streams","streamsMap","forEach","stream","id","setState","Map","componentWillReceiveProps","nextProps","props","search","promise","cancel","_refreshData","componentWillUnmount","_stopTimer","_setupTimer","refresh","enabled","timer","setInterval","interval","clearInterval","_refreshDataFromDecoratorStore","_this2","query","originalQuery","streamId","isCancelled","parseInt","originalRangeType","originalRangeParams","toJS","page","sortField","sortOrder","response","isMounted","searchResult","_determineHistogramResolution","histogram","finally","additional","status","_formatInputs","state","inputs","inputsAsMap","_determineSearchDuration","searchTo","to","searchFrom","sortedIndices","used_indices","sort","i1","i2","end","oldestIndex","valueOf","begin","from","queryRangeInMinutes","diff","duration","asHours","asDays","asMonths","asYears","_isLoading","nodes","fields","render","errorPage","createElement","MalformedSearchQuery","SearchExecutionError","DocumentTitle","title","Spinner","all_fields","SearchResult","builtQuery","built_query","result","formattedHistogram","permissions","currentUser","loadingSearch"],"mappings":"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","file":"53.7274e9222d07ea893176.js","sourcesContent":["webpackJsonp([53],{\n\n/***/ 1326:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _propTypes = __webpack_require__(5);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reflux = __webpack_require__(1);\n\nvar _reflux2 = _interopRequireDefault(_reflux);\n\nvar _immutable = __webpack_require__(54);\n\nvar _immutable2 = _interopRequireDefault(_immutable);\n\nvar _moment = __webpack_require__(35);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _CombinedProvider = __webpack_require__(68);\n\nvar _CombinedProvider2 = _interopRequireDefault(_CombinedProvider);\n\nvar _common = __webpack_require__(49);\n\nvar _search = __webpack_require__(937);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar _CombinedProvider$get = _CombinedProvider2.default.get('Nodes'),\n NodesStore = _CombinedProvider$get.NodesStore,\n NodesActions = _CombinedProvider$get.NodesActions;\n\nvar _CombinedProvider$get2 = _CombinedProvider2.default.get('CurrentUser'),\n CurrentUserStore = _CombinedProvider$get2.CurrentUserStore;\n\nvar _CombinedProvider$get3 = _CombinedProvider2.default.get('Inputs'),\n InputsStore = _CombinedProvider$get3.InputsStore,\n InputsActions = _CombinedProvider$get3.InputsActions;\n\nvar _CombinedProvider$get4 = _CombinedProvider2.default.get('MessageFields'),\n MessageFieldsStore = _CombinedProvider$get4.MessageFieldsStore;\n\nvar _CombinedProvider$get5 = _CombinedProvider2.default.get('Refresh'),\n RefreshStore = _CombinedProvider$get5.RefreshStore;\n\nvar _CombinedProvider$get6 = _CombinedProvider2.default.get('Streams'),\n StreamsStore = _CombinedProvider$get6.StreamsStore;\n\nvar _CombinedProvider$get7 = _CombinedProvider2.default.get('UniversalSearch'),\n UniversalSearchStore = _CombinedProvider$get7.UniversalSearchStore;\n\nvar _CombinedProvider$get8 = _CombinedProvider2.default.get('Search'),\n SearchStore = _CombinedProvider$get8.SearchStore;\n\nvar _CombinedProvider$get9 = _CombinedProvider2.default.get('Decorators'),\n DecoratorsStore = _CombinedProvider$get9.DecoratorsStore;\n\nvar SearchPage = _react2.default.createClass({\n displayName: 'SearchPage',\n\n propTypes: {\n location: _propTypes2.default.object.isRequired,\n searchConfig: _propTypes2.default.object.isRequired,\n searchInStream: _propTypes2.default.object,\n forceFetch: _propTypes2.default.bool\n },\n mixins: [_reflux2.default.connect(NodesStore), _reflux2.default.connect(MessageFieldsStore), _reflux2.default.connect(CurrentUserStore), _reflux2.default.listenTo(InputsStore, '_formatInputs'), _reflux2.default.listenTo(RefreshStore, '_setupTimer', '_setupTimer'), _reflux2.default.listenTo(DecoratorsStore, '_refreshDataFromDecoratorStore', '_refreshDataFromDecoratorStore')],\n getInitialState: function getInitialState() {\n return {\n error: undefined,\n updatingSearch: false,\n updatingHistogram: false\n };\n },\n componentDidMount: function componentDidMount() {\n var _this = this;\n\n InputsActions.list.triggerPromise();\n\n StreamsStore.listStreams().then(function (streams) {\n var streamsMap = {};\n streams.forEach(function (stream) {\n streamsMap[stream.id] = stream;\n });\n _this.setState({ streams: _immutable2.default.Map(streamsMap) });\n });\n\n NodesActions.list();\n },\n componentWillReceiveProps: function componentWillReceiveProps(nextProps) {\n var currentLocation = this.props.location || {};\n var nextLocation = nextProps.location || {};\n\n if (currentLocation.search !== nextLocation.search || this.props.searchInStream !== nextProps.searchInStream || nextProps.forceFetch) {\n if (this.promise) {\n this.promise.cancel();\n }\n this._refreshData(nextProps.searchInStream);\n }\n },\n componentWillUnmount: function componentWillUnmount() {\n this._stopTimer();\n },\n _setupTimer: function _setupTimer(refresh) {\n this._stopTimer();\n if (refresh.enabled) {\n this.timer = setInterval(this._refreshData, refresh.interval);\n }\n },\n _stopTimer: function _stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n },\n _refreshDataFromDecoratorStore: function _refreshDataFromDecoratorStore() {\n var searchInStream = this.props.searchInStream;\n this._refreshData(searchInStream);\n },\n _refreshData: function _refreshData(searchInStream) {\n var _this2 = this;\n\n var query = SearchStore.originalQuery;\n var stream = searchInStream || this.props.searchInStream || {};\n var streamId = stream.id;\n if (this.promise && !this.promise.isCancelled()) {\n return this.promise;\n }\n if (!RefreshStore.enabled || RefreshStore.enabled && parseInt(RefreshStore.interval) > 5000) {\n this.setState({ updatingSearch: true });\n }\n this.promise = UniversalSearchStore.search(SearchStore.originalRangeType, query, SearchStore.originalRangeParams.toJS(), streamId, null, SearchStore.page, SearchStore.sortField, SearchStore.sortOrder).then(function (response) {\n if (_this2.isMounted()) {\n _this2.setState({ searchResult: response, error: undefined });\n }\n\n var interval = _this2.props.location.query.interval ? _this2.props.location.query.interval : _this2._determineHistogramResolution(response);\n\n if (!RefreshStore.enabled || RefreshStore.enabled && parseInt(RefreshStore.interval) > 5000) {\n _this2.setState({ updatingHistogram: true });\n }\n UniversalSearchStore.histogram(SearchStore.originalRangeType, query, SearchStore.originalRangeParams.toJS(), interval, streamId).then(function (histogram) {\n _this2.setState({ histogram: histogram });\n return histogram;\n }).finally(function () {\n return _this2.setState({ updatingHistogram: false });\n });\n\n return response;\n }, function (error) {\n // Treat searches with a malformed query\n if (error.additional) {\n if (error.additional.status) {\n _this2.setState({ error: error.additional });\n }\n }\n }).finally(function () {\n _this2.setState({ updatingSearch: false });\n _this2.promise = undefined;\n });\n },\n _formatInputs: function _formatInputs(state) {\n var inputs = InputsStore.inputsAsMap(state.inputs);\n this.setState({ inputs: _immutable2.default.Map(inputs) });\n },\n _determineSearchDuration: function _determineSearchDuration(response) {\n var searchTo = response.to;\n var searchFrom = void 0;\n if (SearchStore.originalRangeType === 'relative' && SearchStore.originalRangeParams.get('relative') === 0) {\n var sortedIndices = response.used_indices.sort(function (i1, i2) {\n return (0, _moment2.default)(i1.end) - (0, _moment2.default)(i2.end);\n });\n // If we didn't calculate index ranges for the oldest index, pick the next one.\n // This usually happens to the deflector, when index ranges weren't calculated for it yet.\n var oldestIndex = (0, _moment2.default)(sortedIndices[0].end).valueOf() === 0 ? sortedIndices[1] : sortedIndices[0];\n\n if (oldestIndex !== undefined) {\n searchFrom = oldestIndex.begin;\n } else {\n // We don't know when we received the first message, assume the search duration is 0.\n searchFrom = searchTo;\n }\n } else {\n searchFrom = response.from;\n }\n\n var queryRangeInMinutes = (0, _moment2.default)(searchTo).diff(searchFrom, 'minutes');\n\n return _moment2.default.duration(queryRangeInMinutes, 'minutes');\n },\n _determineHistogramResolution: function _determineHistogramResolution(response) {\n var duration = this._determineSearchDuration(response);\n\n if (duration.asHours() < 12) {\n return 'minute';\n }\n\n if (duration.asDays() < 3) {\n return 'hour';\n }\n\n if (duration.asDays() < 30) {\n return 'day';\n }\n\n if (duration.asMonths() < 2) {\n return 'week';\n }\n\n if (duration.asMonths() < 18) {\n return 'month';\n }\n\n if (duration.asYears() < 3) {\n return 'quarter';\n }\n\n return 'year';\n },\n _isLoading: function _isLoading() {\n return !this.state.searchResult || !this.state.inputs || !this.state.streams || !this.state.nodes || !this.state.fields || !this.state.histogram;\n },\n render: function render() {\n if (this.state.error) {\n var errorPage = void 0;\n switch (this.state.error.status) {\n case 400:\n errorPage = _react2.default.createElement(_search.MalformedSearchQuery, { error: this.state.error });\n break;\n default:\n errorPage = _react2.default.createElement(_search.SearchExecutionError, { error: this.state.error });\n }\n\n return _react2.default.createElement(\n _common.DocumentTitle,\n { title: 'Search error' },\n errorPage\n );\n }\n\n if (this._isLoading()) {\n return _react2.default.createElement(_common.Spinner, null);\n }\n\n var searchResult = this.state.searchResult;\n searchResult.all_fields = this.state.fields;\n return _react2.default.createElement(\n _common.DocumentTitle,\n { title: 'Search' },\n _react2.default.createElement(_search.SearchResult, { query: SearchStore.originalQuery, page: SearchStore.page, builtQuery: searchResult.built_query,\n result: searchResult, histogram: this.state.histogram,\n formattedHistogram: this.state.histogram.histogram,\n streams: this.state.streams, inputs: this.state.inputs, nodes: _immutable2.default.Map(this.state.nodes),\n searchInStream: this.props.searchInStream, permissions: this.state.currentUser.permissions,\n searchConfig: this.props.searchConfig,\n loadingSearch: this.state.updatingSearch || this.state.updatingHistogram,\n forceFetch: this.props.forceFetch })\n );\n }\n});\n\nexports.default = SearchPage;\nmodule.exports = exports['default'];\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// 53.7274e9222d07ea893176.js","import PropTypes from 'prop-types';\nimport React from 'react';\nimport Reflux from 'reflux';\nimport Immutable from 'immutable';\nimport moment from 'moment';\n\nimport CombinedProvider from 'injection/CombinedProvider';\nconst { NodesStore, NodesActions } = CombinedProvider.get('Nodes');\nconst { CurrentUserStore } = CombinedProvider.get('CurrentUser');\nconst { InputsStore, InputsActions } = CombinedProvider.get('Inputs');\nconst { MessageFieldsStore } = CombinedProvider.get('MessageFields');\nconst { RefreshStore } = CombinedProvider.get('Refresh');\nconst { StreamsStore } = CombinedProvider.get('Streams');\nconst { UniversalSearchStore } = CombinedProvider.get('UniversalSearch');\nconst { SearchStore } = CombinedProvider.get('Search');\nconst { DecoratorsStore } = CombinedProvider.get('Decorators');\n\nimport { DocumentTitle, Spinner } from 'components/common';\nimport { MalformedSearchQuery, SearchExecutionError, SearchResult } from 'components/search';\n\nconst SearchPage = React.createClass({\n propTypes: {\n location: PropTypes.object.isRequired,\n searchConfig: PropTypes.object.isRequired,\n searchInStream: PropTypes.object,\n forceFetch: PropTypes.bool,\n },\n mixins: [\n Reflux.connect(NodesStore),\n Reflux.connect(MessageFieldsStore),\n Reflux.connect(CurrentUserStore),\n Reflux.listenTo(InputsStore, '_formatInputs'),\n Reflux.listenTo(RefreshStore, '_setupTimer', '_setupTimer'),\n Reflux.listenTo(DecoratorsStore, '_refreshDataFromDecoratorStore', '_refreshDataFromDecoratorStore'),\n ],\n getInitialState() {\n return {\n error: undefined,\n updatingSearch: false,\n updatingHistogram: false,\n };\n },\n componentDidMount() {\n InputsActions.list.triggerPromise();\n\n StreamsStore.listStreams().then((streams) => {\n const streamsMap = {};\n streams.forEach((stream) => { streamsMap[stream.id] = stream; });\n this.setState({ streams: Immutable.Map(streamsMap) });\n });\n\n NodesActions.list();\n },\n componentWillReceiveProps(nextProps) {\n const currentLocation = this.props.location || {};\n const nextLocation = nextProps.location || {};\n\n if (currentLocation.search !== nextLocation.search || this.props.searchInStream !== nextProps.searchInStream || nextProps.forceFetch) {\n if (this.promise) {\n this.promise.cancel();\n }\n this._refreshData(nextProps.searchInStream);\n }\n },\n componentWillUnmount() {\n this._stopTimer();\n },\n _setupTimer(refresh) {\n this._stopTimer();\n if (refresh.enabled) {\n this.timer = setInterval(this._refreshData, refresh.interval);\n }\n },\n _stopTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n },\n _refreshDataFromDecoratorStore() {\n const searchInStream = this.props.searchInStream;\n this._refreshData(searchInStream);\n },\n _refreshData(searchInStream) {\n const query = SearchStore.originalQuery;\n const stream = searchInStream || this.props.searchInStream || {};\n const streamId = stream.id;\n if (this.promise && !this.promise.isCancelled()) {\n return this.promise;\n }\n if (!RefreshStore.enabled || RefreshStore.enabled && parseInt(RefreshStore.interval) > 5000) {\n this.setState({ updatingSearch: true });\n }\n this.promise = UniversalSearchStore.search(SearchStore.originalRangeType, query, SearchStore.originalRangeParams.toJS(), streamId, null, SearchStore.page, SearchStore.sortField, SearchStore.sortOrder)\n .then(\n (response) => {\n if (this.isMounted()) {\n this.setState({ searchResult: response, error: undefined });\n }\n\n const interval = this.props.location.query.interval ? this.props.location.query.interval : this._determineHistogramResolution(response);\n\n if (!RefreshStore.enabled || RefreshStore.enabled && parseInt(RefreshStore.interval) > 5000) {\n this.setState({ updatingHistogram: true });\n }\n UniversalSearchStore.histogram(SearchStore.originalRangeType, query, SearchStore.originalRangeParams.toJS(), interval, streamId)\n .then((histogram) => {\n this.setState({ histogram: histogram });\n return histogram;\n })\n .finally(() => this.setState({ updatingHistogram: false }));\n\n return response;\n },\n (error) => {\n // Treat searches with a malformed query\n if (error.additional) {\n if (error.additional.status) {\n this.setState({ error: error.additional });\n }\n }\n },\n )\n .finally(() => {\n this.setState({ updatingSearch: false });\n this.promise = undefined;\n });\n },\n _formatInputs(state) {\n const inputs = InputsStore.inputsAsMap(state.inputs);\n this.setState({ inputs: Immutable.Map(inputs) });\n },\n _determineSearchDuration(response) {\n const searchTo = response.to;\n let searchFrom;\n if (SearchStore.originalRangeType === 'relative' && SearchStore.originalRangeParams.get('relative') === 0) {\n const sortedIndices = response.used_indices.sort((i1, i2) => moment(i1.end) - moment(i2.end));\n // If we didn't calculate index ranges for the oldest index, pick the next one.\n // This usually happens to the deflector, when index ranges weren't calculated for it yet.\n const oldestIndex = moment(sortedIndices[0].end).valueOf() === 0 ? sortedIndices[1] : sortedIndices[0];\n\n if (oldestIndex !== undefined) {\n searchFrom = oldestIndex.begin;\n } else {\n // We don't know when we received the first message, assume the search duration is 0.\n searchFrom = searchTo;\n }\n } else {\n searchFrom = response.from;\n }\n\n const queryRangeInMinutes = moment(searchTo).diff(searchFrom, 'minutes');\n\n return moment.duration(queryRangeInMinutes, 'minutes');\n },\n _determineHistogramResolution(response) {\n const duration = this._determineSearchDuration(response);\n\n if (duration.asHours() < 12) {\n return 'minute';\n }\n\n if (duration.asDays() < 3) {\n return 'hour';\n }\n\n if (duration.asDays() < 30) {\n return 'day';\n }\n\n if (duration.asMonths() < 2) {\n return 'week';\n }\n\n if (duration.asMonths() < 18) {\n return 'month';\n }\n\n if (duration.asYears() < 3) {\n return 'quarter';\n }\n\n return 'year';\n },\n\n _isLoading() {\n return !this.state.searchResult || !this.state.inputs || !this.state.streams || !this.state.nodes || !this.state.fields || !this.state.histogram;\n },\n\n render() {\n if (this.state.error) {\n let errorPage;\n switch (this.state.error.status) {\n case 400:\n errorPage = ;\n break;\n default:\n errorPage = ;\n }\n\n return {errorPage} ;\n }\n\n if (this._isLoading()) {\n return ;\n }\n\n const searchResult = this.state.searchResult;\n searchResult.all_fields = this.state.fields;\n return (\n \n \n \n );\n },\n});\n\nexport default SearchPage;\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/SearchPage.jsx"],"sourceRoot":""}