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

web-interface.assets.38.e32c01d85dfc6cc7c0cd.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.5
Show newest version
{"version":3,"sources":["webpack:///38.e32c01d85dfc6cc7c0cd.js","webpack:///./src/components/sources/SourceTitle.jsx","webpack:///./src/pages/SourcesPage.jsx","webpack:///./src/components/sources/SourceOverview.jsx","webpack:///./src/components/sources/SourceDataTable.jsx","webpack:///./src/components/sources/SourcePieChart.jsx","webpack:///./src/components/sources/SourceLineChart.jsx"],"names":["webpackJsonp","1103","module","exports","__webpack_require__","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_propTypes","_propTypes2","_react","_react2","SourceTitle","createClass","displayName","propTypes","className","string","resetFilters","func","isRequired","resetFilterId","children","oneOfType","array","element","render","createElement","this","props","style","marginLeft","id","onClick","title","display","1367","_SourceOverview","_SourceOverview2","_common","SourcesPage","DocumentTitle","1368","_jquery","_jquery2","_crossfilter","_crossfilter2","_dc","_dc2","_qs","_qs2","_moment","_moment2","_SourceDataTable","_SourceDataTable2","_SourcePieChart","_SourcePieChart2","_SourceLineChart","_SourceLineChart2","_SupportLink","_SupportLink2","_DateTime","_DateTime2","_UniversalSearch","_UniversalSearch2","_EventHandlersThrottler","_EventHandlersThrottler2","_StoreProvider","_StoreProvider2","_ActionsProvider","_ActionsProvider2","SourcesStore","getStore","SearchStore","HistogramDataActions","getActions","daysToSeconds","days","duration","as","hoursToSeconds","hours","DEFAULT_RANGE_IN_SECS","SUPPORTED_RANGES_IN_SECS","SCREEN_RESOLUTION","window","width","SourceOverview","getInitialState","sourcesData","filterDimension","dimension","d","name","nameDimension","nameMessageGroup","group","reduceSum","message_count","messageCountDimension","histogramData","valueDimension","Date","x","valueGroup","y","range","resolution","filter","loading","renderResultTable","histogramDataAvailable","reloadingHistogram","componentDidMount","_this","onDataTableFiltered","sourceName","refs","sourcePieChart","setFilter","_toggleResetButtons","redrawAll","loadHistogramData","onPieChartFiltered","onLineChartFiltered","changeTimeRange","from","toString","to","syncRangeWithQuery","sourceDataTable","renderDataTable","renderPieChart","sourceLineChart","renderLineChart","applyRangeParameter","renderAll","addEventListener","_resizeCallback","on","_applyRangeFromHash","document","_updateWidth","init","componentWillUnmount","removeEventListener","off","setSearchFilter","_this2","setState","_filterSources","redraw","NUMBER_OF_TOP_VALUES","eventThrottler","loadData","loadSources","_this3","onLoaded","sources","_resetSources","size","state","_this4","pieChartFilters","getFilters","dataTableFilters","filterAll","clearFilters","remove","add","forEach","_this5","filters","length","top","Infinity","map","source","escape","load","then","interval","histogram","_resetHistogram","_this6","lineChartFilters","_this7","throttle","_redirectToRange","location","replace","_getRangeFromOldQueryFormat","query","search","indexOf","substr","parse","_getRangeFromHash","changeRange","hash","hashContent","substring","match","resetSourcesFilters","resetHistogramFilters","updateWidth","rangeSelectBox","rangeSelector","Number","relative","$selectedOptions","text","keyword","show","hide","keepChangeInHistory","_this8","effectiveRange","undefined","_onRangeChanged","event","target","_this9","emptySources","resultsStyle","results","ref","Spinner","numberOfTopValues","onChange","1369","_d","_d2","_numeral","_numeral2","_SourceTitle","_SourceTitle2","_StringUtils","_StringUtils2","SourceDataTable","number","numberOfSources","_getAddToSearchButton","addToSearchButton","setAttribute","unescapeHTML","innerHTML","outerHTML","onDataFiltered","dataTableDomNode","_dataTable","dataTable","some","localeCompare","key","columns","percentage","toFixed","format","sortBy","order","descending","table","selectAll","classed","_addSourceToSearchBarListener","_filterSourceListener","closest","data","addSearchTerm","orOperator","parentTdElement","parents","datum","changeNumberOfSources","_onNumberOfSourcesChanged","_onFilterChanged","resultTable","type","placeholder","htmlFor","1370","_D3Utils","_D3Utils2","SourcePieChart","_pieChart","_configureWidth","pieChartWidth","height","radius","innerRadius","$pieChartDomNode","parent","pieChartDomNode","pieChart","renderLabel","colors","glColourPalette","slicesCap","chart","1371","_graphHelper","_graphHelper2","SourceLineChart","bool","lineChartWidth","_lineChart","String","$lineChartDomNode","lineChartDomNode","effect","complete","altKey","submit","lineChart","margins","left","right","bottom","time","scale","renderHorizontalGridLines","elasticX","elasticY","transitionDuration","events","trigger","xAxis","ticks","customTickInterval","tickFormat","customDateTimeFormat","yAxis","loadingSpinnerStyle","loadingSpinner","noDataOverlayStyle","noDataOverlay"],"mappings":"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","file":"38.e32c01d85dfc6cc7c0cd.js","sourcesContent":["webpackJsonp([38],{\n\n/***/ 1103:\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\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SourceTitle = _react2.default.createClass({\n  displayName: 'SourceTitle',\n\n  propTypes: {\n    className: _propTypes2.default.string,\n    resetFilters: _propTypes2.default.func.isRequired,\n    resetFilterId: _propTypes2.default.string,\n    children: _propTypes2.default.oneOfType([_propTypes2.default.array, _propTypes2.default.element, _propTypes2.default.string]).isRequired\n  },\n  render: function render() {\n    return _react2.default.createElement(\n      'h3',\n      { className: 'sources-title' },\n      this.props.children,\n      _react2.default.createElement(\n        'span',\n        { style: { marginLeft: 10 } },\n        _react2.default.createElement(\n          'button',\n          { id: this.props.resetFilterId, className: 'btn btn-info btn-xs ' + this.props.className,\n            onClick: this.props.resetFilters, title: 'Reset filter', style: { display: 'none' } },\n          'Reset'\n        )\n      )\n    );\n  }\n});\n\nexports.default = SourceTitle;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ 1367:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SourceOverview = __webpack_require__(1368);\n\nvar _SourceOverview2 = _interopRequireDefault(_SourceOverview);\n\nvar _common = __webpack_require__(46);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SourcesPage = _react2.default.createClass({\n  displayName: 'SourcesPage',\n  render: function render() {\n    return _react2.default.createElement(\n      _common.DocumentTitle,\n      { title: 'Sources' },\n      _react2.default.createElement(_SourceOverview2.default, null)\n    );\n  }\n});\n\nexports.default = SourcesPage;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ 1368:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _jquery = __webpack_require__(14);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _crossfilter = __webpack_require__(271);\n\nvar _crossfilter2 = _interopRequireDefault(_crossfilter);\n\nvar _dc = __webpack_require__(269);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _qs = __webpack_require__(90);\n\nvar _qs2 = _interopRequireDefault(_qs);\n\nvar _moment = __webpack_require__(35);\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _SourceDataTable = __webpack_require__(1369);\n\nvar _SourceDataTable2 = _interopRequireDefault(_SourceDataTable);\n\nvar _SourcePieChart = __webpack_require__(1370);\n\nvar _SourcePieChart2 = _interopRequireDefault(_SourcePieChart);\n\nvar _SourceLineChart = __webpack_require__(1371);\n\nvar _SourceLineChart2 = _interopRequireDefault(_SourceLineChart);\n\nvar _SupportLink = __webpack_require__(278);\n\nvar _SupportLink2 = _interopRequireDefault(_SupportLink);\n\nvar _common = __webpack_require__(46);\n\nvar _DateTime = __webpack_require__(50);\n\nvar _DateTime2 = _interopRequireDefault(_DateTime);\n\nvar _UniversalSearch = __webpack_require__(171);\n\nvar _UniversalSearch2 = _interopRequireDefault(_UniversalSearch);\n\nvar _EventHandlersThrottler = __webpack_require__(274);\n\nvar _EventHandlersThrottler2 = _interopRequireDefault(_EventHandlersThrottler);\n\nvar _StoreProvider = __webpack_require__(23);\n\nvar _StoreProvider2 = _interopRequireDefault(_StoreProvider);\n\nvar _ActionsProvider = __webpack_require__(8);\n\nvar _ActionsProvider2 = _interopRequireDefault(_ActionsProvider);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SourcesStore = _StoreProvider2.default.getStore('Sources');\nvar HistogramDataStore = _StoreProvider2.default.getStore('HistogramData');\nvar SearchStore = _StoreProvider2.default.getStore('Search');\n\nvar HistogramDataActions = _ActionsProvider2.default.getActions('HistogramData');\n\nvar daysToSeconds = function daysToSeconds(days) {\n  return _moment2.default.duration(days, 'days').as('seconds');\n};\nvar hoursToSeconds = function hoursToSeconds(hours) {\n  return _moment2.default.duration(hours, 'hours').as('seconds');\n};\n\nvar DEFAULT_RANGE_IN_SECS = hoursToSeconds(1);\nvar SUPPORTED_RANGES_IN_SECS = [hoursToSeconds(1), daysToSeconds(1), daysToSeconds(7), daysToSeconds(31), daysToSeconds(365), 0];\n\nvar SCREEN_RESOLUTION = (0, _jquery2.default)(window).width();\n\nvar SourceOverview = _react2.default.createClass({\n  displayName: 'SourceOverview',\n  getInitialState: function getInitialState() {\n    this.sourcesData = (0, _crossfilter2.default)();\n    this.filterDimension = this.sourcesData.dimension(function (d) {\n      return d.name;\n    });\n    this.nameDimension = this.sourcesData.dimension(function (d) {\n      return d.name;\n    });\n    this.nameMessageGroup = this.nameDimension.group().reduceSum(function (d) {\n      return d.message_count;\n    });\n\n    this.messageCountDimension = this.sourcesData.dimension(function (d) {\n      return d.message_count;\n    });\n\n    this.histogramData = (0, _crossfilter2.default)();\n    this.valueDimension = this.histogramData.dimension(function (d) {\n      return new Date(d.x);\n    });\n    this.valueGroup = this.valueDimension.group().reduceSum(function (d) {\n      return d.y;\n    });\n\n    return {\n      range: null,\n      resolution: 'minute',\n      filter: '',\n      loading: false,\n      renderResultTable: true,\n      histogramDataAvailable: true,\n      reloadingHistogram: false\n    };\n  },\n  componentDidMount: function componentDidMount() {\n    var _this = this;\n\n    var onDataTableFiltered = function onDataTableFiltered(sourceName) {\n      _this.refs.sourcePieChart.setFilter(sourceName);\n      _this._toggleResetButtons();\n      _dc2.default.redrawAll();\n      _this.loadHistogramData();\n    };\n\n    var onPieChartFiltered = function onPieChartFiltered() {\n      _this.loadHistogramData();\n      _this._toggleResetButtons();\n    };\n\n    var onLineChartFiltered = function onLineChartFiltered(filter) {\n      if (filter) {\n        SearchStore.changeTimeRange('absolute', {\n          from: new _DateTime2.default(filter[0]).toString(),\n          to: new _DateTime2.default(filter[1]).toString()\n        });\n      } else {\n        _this.syncRangeWithQuery();\n      }\n    };\n\n    this.refs.sourceDataTable.renderDataTable(this.messageCountDimension, this.nameMessageGroup, onDataTableFiltered);\n    this.refs.sourcePieChart.renderPieChart(this.nameDimension, this.nameMessageGroup, onPieChartFiltered);\n    this.refs.sourceLineChart.renderLineChart(this.valueDimension, this.valueGroup, onLineChartFiltered);\n    this.applyRangeParameter();\n    _dc2.default.renderAll();\n    window.addEventListener('resize', this._resizeCallback);\n    (0, _jquery2.default)(window).on('hashchange', this._applyRangeFromHash);\n    // register them live as we do not know if those buttons are currently in the DOM\n    (0, _jquery2.default)(document).on('click', '.sidebar-hide', this._updateWidth);\n    (0, _jquery2.default)(document).on('click', '.sidebar-show', this._updateWidth);\n    _UniversalSearch2.default.init();\n  },\n  componentWillUnmount: function componentWillUnmount() {\n    window.removeEventListener('resize', this._resizeCallback);\n    (0, _jquery2.default)(window).off('hashchange', this._applyRangeFromHash);\n    (0, _jquery2.default)(document).off('click', '.sidebar-hide', this._updateWidth);\n    (0, _jquery2.default)(document).off('click', '.sidebar-show', this._updateWidth);\n  },\n  setSearchFilter: function setSearchFilter(filter) {\n    var _this2 = this;\n\n    this.setState({ filter: filter }, function () {\n      _this2._filterSources();\n      _this2.refs.sourceDataTable.redraw();\n      _this2.refs.sourcePieChart.redraw();\n    });\n  },\n\n\n  NUMBER_OF_TOP_VALUES: 10,\n  eventThrottler: new _EventHandlersThrottler2.default(),\n\n  loadData: function loadData() {\n    this.loadSources();\n    this.loadHistogramData();\n  },\n  loadSources: function loadSources() {\n    var _this3 = this;\n\n    var onLoaded = function onLoaded(sources) {\n      _this3._resetSources(sources);\n      _this3.setState({ renderResultTable: _this3.sourcesData.size() !== 0, loading: false });\n      _this3._updateWidth();\n    };\n\n    SourcesStore.loadSources(this.state.range, onLoaded);\n  },\n  _resetSources: function _resetSources(sources) {\n    var _this4 = this;\n\n    /*\n     * http://stackoverflow.com/questions/23500546/replace-crossfilter-data-restore-dimensions-and-groups\n     * It looks like dc interacts with crossfilter to represent the graphs and apply some filters\n     * on the crossfilter dimension, but it also stores those filters internally. That means that\n     * we need to remove the dimension and graphs filters, but we only need to reapply filters to the\n     * graphs, dc will propagate that to the crossfilter dimension.\n     */\n    var pieChartFilters = this.refs.sourcePieChart.getFilters();\n    var dataTableFilters = this.refs.sourceDataTable.getFilters();\n    this.nameDimension.filterAll();\n    this.filterDimension.filterAll();\n    this.refs.sourcePieChart.clearFilters();\n    this.refs.sourceDataTable.clearFilters();\n    this.sourcesData.remove();\n    this.sourcesData.add(sources);\n\n    pieChartFilters.forEach(function (filter) {\n      return _this4.refs.sourcePieChart.setFilter(filter);\n    });\n    dataTableFilters.forEach(function (filter) {\n      return _this4.refs.sourceDataTable.setFilter(filter);\n    });\n    this._filterSources();\n\n    _dc2.default.redrawAll();\n  },\n  loadHistogramData: function loadHistogramData() {\n    var _this5 = this;\n\n    var filters = void 0;\n\n    if (this.refs.sourcePieChart.getFilters().length !== 0 || this.refs.sourceDataTable.getFilters().length !== 0) {\n      filters = this.nameDimension.top(Infinity).map(function (source) {\n        return _UniversalSearch2.default.escape(source.name);\n      });\n    }\n\n    HistogramDataActions.load(this.state.range, filters, SCREEN_RESOLUTION).then(function (histogramData) {\n      _this5.setState({\n        resolution: histogramData.interval,\n        reloadingHistogram: false,\n        histogramDataAvailable: histogramData.histogram.length >= 2\n      });\n      _this5._resetHistogram(histogramData.histogram);\n    });\n\n    this.setState({ reloadingHistogram: true });\n  },\n  _resetHistogram: function _resetHistogram(histogram) {\n    var _this6 = this;\n\n    var lineChartFilters = this.refs.sourceLineChart.getFilters();\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    this.histogramData.remove();\n    this.histogramData.add(histogram);\n\n    lineChartFilters.forEach(function (filter) {\n      return _this6.refs.sourceLineChart.setFilter(filter);\n    });\n\n    _dc2.default.redrawAll();\n  },\n  _resizeCallback: function _resizeCallback() {\n    var _this7 = this;\n\n    this.eventThrottler.throttle(function () {\n      return _this7._updateWidth();\n    });\n  },\n\n\n  // redirect old range format (as query parameter) to new format (deep link)\n  _redirectToRange: function _redirectToRange(range) {\n    // if range is ill formatted, we take care of it in the deep link handling\n    window.location.replace('sources#' + range);\n  },\n  _getRangeFromOldQueryFormat: function _getRangeFromOldQueryFormat() {\n    var query = window.location.search;\n    if (query) {\n      if (query.indexOf('?') === 0 && query.length > 1) {\n        query = query.substr(1, query.length - 1);\n        var range = _qs2.default.parse(query).range;\n        if (range) {\n          return range;\n        }\n      }\n    }\n    return null;\n  },\n  _applyRangeFromHash: function _applyRangeFromHash() {\n    var range = this._getRangeFromHash();\n    this.changeRange(range, false);\n  },\n  applyRangeParameter: function applyRangeParameter() {\n    var range = this._getRangeFromOldQueryFormat();\n    if (range) {\n      this._redirectToRange(range);\n    } else {\n      this._applyRangeFromHash();\n    }\n  },\n  _getRangeFromHash: function _getRangeFromHash() {\n    var hash = window.location.hash;\n    if (hash.indexOf('#') !== 0) {\n      return DEFAULT_RANGE_IN_SECS;\n    }\n    var hashContent = hash.substring(1);\n    if (hash.indexOf('&') < 0) {\n      // If there is only one param in the hash, return it\n      return hashContent;\n    }\n    // If there are more than one params in the hash, return the numeric one\n    var match = hashContent.match(/(\\d+)=&/);\n    return match && match.length > 0 ? match[1] : DEFAULT_RANGE_IN_SECS;\n  },\n  resetSourcesFilters: function resetSourcesFilters() {\n    this.refs.sourcePieChart.clearFilters();\n    this.nameDimension.filterAll();\n    this.loadHistogramData();\n    this._toggleResetButtons();\n    _dc2.default.redrawAll();\n  },\n  resetHistogramFilters: function resetHistogramFilters() {\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    _dc2.default.redrawAll();\n  },\n  _updateWidth: function _updateWidth() {\n    SCREEN_RESOLUTION = (0, _jquery2.default)(window).width();\n    this.refs.sourcePieChart.updateWidth();\n    this.refs.sourceLineChart.updateWidth();\n    _dc2.default.renderAll();\n  },\n  syncRangeWithQuery: function syncRangeWithQuery() {\n    var rangeSelectBox = this.refs.rangeSelector;\n    if (Number(rangeSelectBox.value) === 0) {\n      SearchStore.changeTimeRange('relative', { relative: 0 });\n    } else {\n      var $selectedOptions = (0, _jquery2.default)(':selected', rangeSelectBox);\n      var text = $selectedOptions && $selectedOptions[0] && $selectedOptions[0].text;\n      SearchStore.changeTimeRange('keyword', { keyword: text });\n    }\n  },\n  _toggleResetButtons: function _toggleResetButtons() {\n    // We only need to toggle the datatable reset button, dc will take care of the other reset buttons\n    if (this.refs.sourcePieChart.getFilters().length !== 0) {\n      (0, _jquery2.default)('#dc-sources-result-reset').show();\n    } else {\n      (0, _jquery2.default)('#dc-sources-result-reset').hide();\n    }\n  },\n  changeRange: function changeRange(range, keepChangeInHistory) {\n    var _this8 = this;\n\n    var effectiveRange = range;\n\n    if (effectiveRange !== undefined) {\n      effectiveRange = Number(effectiveRange);\n    }\n\n    if (typeof effectiveRange === 'undefined' || SUPPORTED_RANGES_IN_SECS.indexOf(effectiveRange) === -1) {\n      effectiveRange = DEFAULT_RANGE_IN_SECS;\n    }\n\n    if (this.state.range === effectiveRange) {\n      return;\n    }\n\n    // when range is changed the filter in line chart (corresponding to the brush) does not make any sense any more\n    this.valueDimension.filterAll();\n    this.refs.sourceLineChart.clearFilters();\n    this.syncRangeWithQuery();\n    if (keepChangeInHistory) {\n      window.location.hash = '#' + effectiveRange;\n    } else {\n      window.location.replace('#' + effectiveRange);\n    }\n    this.setState({ range: effectiveRange, histogramDataAvailable: true, loading: true }, function () {\n      return _this8.loadData();\n    });\n  },\n  _onRangeChanged: function _onRangeChanged(event) {\n    var value = event.target.value;\n    this.changeRange(value, true);\n  },\n  _filterSources: function _filterSources() {\n    var _this9 = this;\n\n    this.filterDimension.filter(function (name) {\n      return name.indexOf(_this9.state.filter) !== -1;\n    });\n  },\n  render: function render() {\n    var emptySources = _react2.default.createElement(\n      'div',\n      { className: 'row content' },\n      _react2.default.createElement(\n        'div',\n        { className: 'col-md-12' },\n        _react2.default.createElement(\n          'div',\n          { className: 'alert alert-info' },\n          'No message sources found for this time range. Did you try using a different one?'\n        )\n      )\n    );\n\n    var resultsStyle = this.state.renderResultTable ? null : { display: 'none' };\n    var results = _react2.default.createElement(\n      'div',\n      { style: resultsStyle },\n      _react2.default.createElement(\n        'div',\n        { className: 'row content' },\n        _react2.default.createElement(_SourceLineChart2.default, { ref: 'sourceLineChart',\n          reloadingHistogram: this.state.reloadingHistogram,\n          histogramDataAvailable: this.state.histogramDataAvailable,\n          resolution: this.state.resolution,\n          resetFilters: this.resetHistogramFilters })\n      ),\n      this.state.loading ? _react2.default.createElement(\n        'div',\n        { className: 'row content' },\n        _react2.default.createElement(\n          'div',\n          { style: { marginLeft: 10 } },\n          _react2.default.createElement(_common.Spinner, null)\n        )\n      ) : null,\n      _react2.default.createElement(\n        'div',\n        { className: 'row content', style: { display: this.state.loading ? 'none' : 'block' } },\n        _react2.default.createElement(\n          'div',\n          { className: 'col-md-7' },\n          _react2.default.createElement(_SourceDataTable2.default, { ref: 'sourceDataTable', resetFilters: this.resetSourcesFilters,\n            setSearchFilter: this.setSearchFilter, numberOfTopValues: this.NUMBER_OF_TOP_VALUES })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'col-md-3 col-md-offset-1' },\n          _react2.default.createElement(_SourcePieChart2.default, { ref: 'sourcePieChart', resetFilters: this.resetSourcesFilters,\n            numberOfTopValues: this.NUMBER_OF_TOP_VALUES })\n        )\n      )\n    );\n\n    return _react2.default.createElement(\n      'div',\n      null,\n      _react2.default.createElement(\n        'div',\n        { className: 'row content' },\n        _react2.default.createElement(\n          'div',\n          { className: 'col-md-12' },\n          _react2.default.createElement(\n            'div',\n            null,\n            _react2.default.createElement(\n              'div',\n              { className: 'pull-right' },\n              _react2.default.createElement(\n                'select',\n                { ref: 'rangeSelector', className: 'sources-range form-control input-sm', value: this.state.range,\n                  onChange: this._onRangeChanged },\n                _react2.default.createElement(\n                  'option',\n                  { value: hoursToSeconds(1) },\n                  'Last Hour'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: daysToSeconds(1) },\n                  'Last Day'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: daysToSeconds(7) },\n                  'Last Week'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: daysToSeconds(31) },\n                  'Last Month'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: daysToSeconds(365) },\n                  'Last Year'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: '0' },\n                  'All'\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'h1',\n              null,\n              'Sources'\n            )\n          ),\n          _react2.default.createElement(\n            'p',\n            { className: 'description' },\n            'This is a list of all sources that sent in messages to Graylog. Note that the list is cached for a few seconds so you might have to wait a bit until a new source appears.'\n          ),\n          _react2.default.createElement(\n            _SupportLink2.default,\n            null,\n            ' Use your mouse to interact with the table and graphs on this page, and get a better ' + 'overview of the sources sending data into Graylog.'\n          )\n        )\n      ),\n      this.state.renderResultTable ? null : emptySources,\n      results\n    );\n  }\n});\n\nexports.default = SourceOverview;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ 1369:\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 _jquery = __webpack_require__(14);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _d = __webpack_require__(89);\n\nvar _d2 = _interopRequireDefault(_d);\n\nvar _dc = __webpack_require__(269);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _numeral = __webpack_require__(118);\n\nvar _numeral2 = _interopRequireDefault(_numeral);\n\nvar _SourceTitle = __webpack_require__(1103);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _UniversalSearch = __webpack_require__(171);\n\nvar _UniversalSearch2 = _interopRequireDefault(_UniversalSearch);\n\nvar _StringUtils = __webpack_require__(87);\n\nvar _StringUtils2 = _interopRequireDefault(_StringUtils);\n\nvar _StoreProvider = __webpack_require__(23);\n\nvar _StoreProvider2 = _interopRequireDefault(_StoreProvider);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SearchStore = _StoreProvider2.default.getStore('Search');\n\nvar SourceDataTable = _react2.default.createClass({\n  displayName: 'SourceDataTable',\n\n  propTypes: {\n    numberOfTopValues: _propTypes2.default.number.isRequired,\n    resetFilters: _propTypes2.default.func.isRequired,\n    setSearchFilter: _propTypes2.default.func.isRequired\n  },\n\n  getInitialState: function getInitialState() {\n    return {\n      numberOfSources: 100\n    };\n  },\n  _getAddToSearchButton: function _getAddToSearchButton(source) {\n    var addToSearchButton = document.createElement('button');\n    addToSearchButton.className = 'btn btn-xs btn-default dc-search-button';\n    addToSearchButton.title = 'Add to search query';\n    addToSearchButton.setAttribute('data-source', _StringUtils2.default.unescapeHTML(source));\n    addToSearchButton.innerHTML = \"\";\n\n    return addToSearchButton.outerHTML;\n  },\n  renderDataTable: function renderDataTable(dimension, group, onDataFiltered) {\n    var _this = this;\n\n    var dataTableDomNode = (0, _jquery2.default)('#dc-sources-result')[0];\n    this._dataTable = _dc2.default.dataTable(dataTableDomNode);\n    this._dataTable.dimension(dimension).group(function (d) {\n      var topValues = group.top(_this.props.numberOfTopValues);\n      var dInTopValues = topValues.some(function (value) {\n        return d.name.localeCompare(value.key) === 0;\n      });\n      return dInTopValues ? 'Top sources' : 'Others';\n    }).size(this.state.numberOfSources).columns([function (d) {\n      return '' + d.name + '';\n    }, function (d) {\n      return d.percentage.toFixed(2) + '%';\n    }, function (d) {\n      return (0, _numeral2.default)(d.message_count).format('0,0');\n    }, function (d) {\n      return _this._getAddToSearchButton(d.name);\n    }]).sortBy(function (d) {\n      return d.message_count;\n    }).order(_d2.default.descending).on('renderlet', function (table) {\n      table.selectAll('.dc-table-group').classed('info', true);\n      _this._addSourceToSearchBarListener(table);\n      _this._filterSourceListener(table, onDataFiltered);\n    });\n  },\n  _addSourceToSearchBarListener: function _addSourceToSearchBarListener(table) {\n    table.selectAll('td.dc-table-column .dc-search-button').on('click', function () {\n      var source = (0, _jquery2.default)(_d2.default.event.target).closest('button').data('source');\n      SearchStore.addSearchTerm('source', source, _UniversalSearch2.default.orOperator());\n    });\n  },\n  _filterSourceListener: function _filterSourceListener(table, onDataFiltered) {\n    table.selectAll('td.dc-table-column a.dc-filter-link').on('click', function () {\n      var parentTdElement = (0, _jquery2.default)(_d2.default.event.target).parents('td.dc-table-column._0');\n      var datum = _d2.default.selectAll(parentTdElement).datum();\n\n      onDataFiltered(datum.name);\n    });\n  },\n  redraw: function redraw() {\n    this._dataTable.redraw();\n  },\n  clearFilters: function clearFilters() {\n    this._dataTable.filterAll();\n  },\n  getFilters: function getFilters() {\n    return this._dataTable ? this._dataTable.filters() : [];\n  },\n  setFilter: function setFilter(filter) {\n    this._dataTable.filter(filter);\n  },\n  changeNumberOfSources: function changeNumberOfSources(numberOfSources) {\n    this._dataTable.size(numberOfSources).redraw();\n  },\n  _onNumberOfSourcesChanged: function _onNumberOfSourcesChanged(event) {\n    var _this2 = this;\n\n    this.setState({ numberOfSources: event.target.value }, function () {\n      _this2.changeNumberOfSources(_this2.state.numberOfSources);\n    });\n  },\n  _onFilterChanged: function _onFilterChanged(event) {\n    this.props.setSearchFilter(event.target.value);\n  },\n  render: function render() {\n    var resultTable = _react2.default.createElement(\n      'table',\n      { id: 'dc-sources-result', className: 'sources table table-hover' },\n      _react2.default.createElement(\n        'thead',\n        null,\n        _react2.default.createElement(\n          'tr',\n          null,\n          _react2.default.createElement(\n            'th',\n            { style: { width: '60%' } },\n            'Name'\n          ),\n          _react2.default.createElement(\n            'th',\n            null,\n            'Percentage'\n          ),\n          _react2.default.createElement(\n            'th',\n            null,\n            'Message count'\n          ),\n          _react2.default.createElement('th', { style: { width: 10 } })\n        )\n      )\n    );\n\n    return _react2.default.createElement(\n      'div',\n      null,\n      _react2.default.createElement(\n        _SourceTitle2.default,\n        { resetFilterId: 'dc-sources-result-reset', resetFilters: this.props.resetFilters },\n        'Selected sources'\n      ),\n      _react2.default.createElement(\n        'div',\n        { className: 'row sources-filtering' },\n        _react2.default.createElement(\n          'div',\n          { className: 'col-md-6' },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-inline' },\n            _react2.default.createElement(\n              'div',\n              { className: 'form-group' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control input-sm', onChange: this._onFilterChanged,\n                placeholder: 'Search' })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'col-md-6' },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-inline text-right' },\n            _react2.default.createElement(\n              'div',\n              { className: 'form-group' },\n              _react2.default.createElement(\n                'label',\n                { htmlFor: 'no-results' },\n                'Show:'\n              ),\n              _react2.default.createElement(\n                'select',\n                { id: 'no-results', className: 'form-control input-sm', onChange: this._onNumberOfSourcesChanged,\n                  value: this.state.numberOfSources },\n                _react2.default.createElement(\n                  'option',\n                  { value: '10' },\n                  '10'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: '50' },\n                  '50'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: '100' },\n                  '100'\n                ),\n                _react2.default.createElement(\n                  'option',\n                  { value: '500' },\n                  '500'\n                )\n              )\n            )\n          )\n        )\n      ),\n      resultTable\n    );\n  }\n});\n\nexports.default = SourceDataTable;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ 1370:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _jquery = __webpack_require__(14);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _dc = __webpack_require__(269);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _numeral = __webpack_require__(118);\n\nvar _numeral2 = _interopRequireDefault(_numeral);\n\nvar _propTypes = __webpack_require__(5);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = __webpack_require__(2);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _SourceTitle = __webpack_require__(1103);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _D3Utils = __webpack_require__(273);\n\nvar _D3Utils2 = _interopRequireDefault(_D3Utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SourcePieChart = _react2.default.createClass({\n  displayName: 'SourcePieChart',\n\n  propTypes: {\n    resetFilters: _propTypes2.default.func.isRequired,\n    numberOfTopValues: _propTypes2.default.number.isRequired\n  },\n\n  getFilters: function getFilters() {\n    return this._pieChart ? this._pieChart.filters() : [];\n  },\n  setFilter: function setFilter(filter) {\n    this._pieChart.filter(filter);\n  },\n  clearFilters: function clearFilters() {\n    this._pieChart.filterAll();\n  },\n  redraw: function redraw() {\n    this._pieChart.redraw();\n  },\n  _configureWidth: function _configureWidth(pieChartWidth) {\n    this._pieChart.width(pieChartWidth).height(pieChartWidth).radius(pieChartWidth / 2 - 10).innerRadius(pieChartWidth / 5);\n  },\n  updateWidth: function updateWidth() {\n    var $pieChartDomNode = (0, _jquery2.default)('#dc-sources-pie-chart').parent();\n    var pieChartWidth = $pieChartDomNode.width();\n    this._configureWidth(pieChartWidth);\n  },\n  renderPieChart: function renderPieChart(dimension, group, onDataFiltered) {\n    var pieChartDomNode = (0, _jquery2.default)('#dc-sources-pie-chart')[0];\n    var pieChartWidth = (0, _jquery2.default)(pieChartDomNode).width();\n    this._pieChart = _dc2.default.pieChart(pieChartDomNode);\n    this._pieChart.renderLabel(false).dimension(dimension).group(group).colors(_D3Utils2.default.glColourPalette()).slicesCap(this.props.numberOfTopValues).title(function (d) {\n      return d.key + ': ' + (0, _numeral2.default)(d.value).format('0,0');\n    }).on('renderlet', function (chart) {\n      chart.selectAll('.pie-slice').on('click', function () {\n        onDataFiltered();\n      });\n    });\n    this._configureWidth(pieChartWidth);\n  },\n  render: function render() {\n    return _react2.default.createElement(\n      'div',\n      { id: 'dc-sources-pie-chart', ref: 'sourcePieChart' },\n      _react2.default.createElement(\n        _SourceTitle2.default,\n        { className: 'reset', resetFilters: this.props.resetFilters },\n        'Messages per source'\n      )\n    );\n  }\n});\n\nexports.default = SourcePieChart;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ 1371:\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 _jquery = __webpack_require__(14);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\n__webpack_require__(286);\n\nvar _dc = __webpack_require__(269);\n\nvar _dc2 = _interopRequireDefault(_dc);\n\nvar _d = __webpack_require__(89);\n\nvar _d2 = _interopRequireDefault(_d);\n\nvar _UniversalSearch = __webpack_require__(171);\n\nvar _UniversalSearch2 = _interopRequireDefault(_UniversalSearch);\n\nvar _SourceTitle = __webpack_require__(1103);\n\nvar _SourceTitle2 = _interopRequireDefault(_SourceTitle);\n\nvar _D3Utils = __webpack_require__(273);\n\nvar _D3Utils2 = _interopRequireDefault(_D3Utils);\n\nvar _graphHelper = __webpack_require__(170);\n\nvar _graphHelper2 = _interopRequireDefault(_graphHelper);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SourceLineChart = _react2.default.createClass({\n  displayName: 'SourceLineChart',\n\n  propTypes: {\n    histogramDataAvailable: _propTypes2.default.bool.isRequired,\n    reloadingHistogram: _propTypes2.default.bool.isRequired,\n    resetFilters: _propTypes2.default.func.isRequired,\n    resolution: _propTypes2.default.string.isRequired\n  },\n\n  getInitialState: function getInitialState() {\n    return {\n      lineChartWidth: '100%'\n    };\n  },\n  getFilters: function getFilters() {\n    return this._lineChart ? this._lineChart.filters() : [];\n  },\n  setFilter: function setFilter(filter) {\n    this._lineChart.filter(filter);\n  },\n  clearFilters: function clearFilters() {\n    this._lineChart.filterAll();\n  },\n  _configureWidth: function _configureWidth(lineChartWidth) {\n    this._lineChart.width(lineChartWidth);\n    this.setState({ lineChartWidth: String(lineChartWidth) + 'px' });\n  },\n  updateWidth: function updateWidth() {\n    var $lineChartDomNode = (0, _jquery2.default)('#dc-sources-line-chart');\n    var lineChartWidth = $lineChartDomNode.width();\n    this._configureWidth(lineChartWidth);\n  },\n  renderLineChart: function renderLineChart(dimension, group, onDataFiltered) {\n    var lineChartDomNode = (0, _jquery2.default)('#dc-sources-line-chart')[0];\n    var width = (0, _jquery2.default)(lineChartDomNode).width();\n    (0, _jquery2.default)(document).on('mouseup', '#dc-sources-line-chart svg', function (event) {\n      (0, _jquery2.default)('.timerange-selector-container').effect('bounce', {\n        complete: function complete() {\n          // Submit search directly if alt key is pressed.\n          if (event.altKey) {\n            _UniversalSearch2.default.submit();\n          }\n        }\n      });\n    });\n    this._lineChart = _dc2.default.lineChart(lineChartDomNode);\n    this._lineChart.height(200).margins({ left: 35, right: 20, top: 20, bottom: 20 }).dimension(dimension).group(group).x(_d2.default.time.scale()).renderHorizontalGridLines(true)\n    // FIXME: causes those nasty exceptions when rendering data (one per x axis tick)\n    .elasticX(true).elasticY(true).transitionDuration(30).colors(_D3Utils2.default.glColourPalette()).on('filtered', function (chart) {\n      _dc2.default.events.trigger(function () {\n        var filter = chart.filter();\n        onDataFiltered(filter);\n      });\n    });\n    this._configureWidth(width);\n    this._lineChart.xAxis().ticks(_graphHelper2.default.customTickInterval()).tickFormat(_graphHelper2.default.customDateTimeFormat());\n    this._lineChart.yAxis().ticks(6).tickFormat(_d2.default.format('s'));\n  },\n  render: function render() {\n    var loadingSpinnerStyle = {\n      display: this.props.reloadingHistogram ? 'block' : 'none',\n      width: this.state.lineChartWidth\n    };\n    var loadingSpinner = _react2.default.createElement(\n      'div',\n      { className: 'sources overlay', style: loadingSpinnerStyle },\n      _react2.default.createElement('i', { className: 'fa fa-spin fa-refresh spinner' })\n    );\n\n    var noDataOverlayStyle = {\n      display: this.props.histogramDataAvailable ? 'none' : 'block',\n      width: this.state.lineChartWidth\n    };\n    var noDataOverlay = _react2.default.createElement(\n      'div',\n      { className: 'sources overlay', style: noDataOverlayStyle },\n      'Not enough data'\n    );\n    return _react2.default.createElement(\n      'div',\n      { id: 'dc-sources-line-chart', className: 'col-md-12' },\n      _react2.default.createElement(\n        _SourceTitle2.default,\n        { className: 'reset', resetFilters: this.props.resetFilters },\n        'Messages per ',\n        this.props.resolution\n      ),\n      loadingSpinner,\n      noDataOverlay\n    );\n  }\n});\n\nexports.default = SourceLineChart;\nmodule.exports = exports['default'];\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// 38.e32c01d85dfc6cc7c0cd.js","import PropTypes from 'prop-types';\nimport React from 'react';\n\nconst SourceTitle = React.createClass({\n  propTypes: {\n    className: PropTypes.string,\n    resetFilters: PropTypes.func.isRequired,\n    resetFilterId: PropTypes.string,\n    children: PropTypes.oneOfType([\n      PropTypes.array,\n      PropTypes.element,\n      PropTypes.string,\n    ]).isRequired,\n  },\n  render() {\n    return (\n      

\n {this.props.children}\n \n \n \n

\n );\n },\n});\n\nexport default SourceTitle;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sources/SourceTitle.jsx","import React from 'react';\n\nimport SourceOverview from 'components/sources/SourceOverview';\nimport { DocumentTitle } from 'components/common';\n\nconst SourcesPage = React.createClass({\n render() {\n return (\n \n \n \n );\n },\n});\n\nexport default SourcesPage;\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/SourcesPage.jsx","import React from 'react';\nimport $ from 'jquery';\nimport crossfilter from 'crossfilter';\nimport dc from 'dc';\nimport Qs from 'qs';\nimport moment from 'moment';\n\nimport SourceDataTable from './SourceDataTable';\nimport SourcePieChart from './SourcePieChart';\nimport SourceLineChart from './SourceLineChart';\nimport SupportLink from 'components/support/SupportLink';\nimport { Spinner } from 'components/common';\n\nimport DateTime from 'logic/datetimes/DateTime';\nimport UniversalSearch from 'logic/search/UniversalSearch';\nimport EventHandlersThrottler from 'util/EventHandlersThrottler';\n\nimport StoreProvider from 'injection/StoreProvider';\nconst SourcesStore = StoreProvider.getStore('Sources');\nconst HistogramDataStore = StoreProvider.getStore('HistogramData');\nconst SearchStore = StoreProvider.getStore('Search');\n\nimport ActionsProvider from 'injection/ActionsProvider';\nconst HistogramDataActions = ActionsProvider.getActions('HistogramData');\n\nconst daysToSeconds = days => moment.duration(days, 'days').as('seconds');\nconst hoursToSeconds = hours => moment.duration(hours, 'hours').as('seconds');\n\nconst DEFAULT_RANGE_IN_SECS = hoursToSeconds(1);\nconst SUPPORTED_RANGES_IN_SECS = [hoursToSeconds(1), daysToSeconds(1), daysToSeconds(7), daysToSeconds(31), daysToSeconds(365), 0];\n\nlet SCREEN_RESOLUTION = $(window).width();\n\nconst SourceOverview = React.createClass({\n getInitialState() {\n this.sourcesData = crossfilter();\n this.filterDimension = this.sourcesData.dimension(d => d.name);\n this.nameDimension = this.sourcesData.dimension(d => d.name);\n this.nameMessageGroup = this.nameDimension.group().reduceSum(d => d.message_count);\n\n this.messageCountDimension = this.sourcesData.dimension(d => d.message_count);\n\n this.histogramData = crossfilter();\n this.valueDimension = this.histogramData.dimension(d => new Date(d.x));\n this.valueGroup = this.valueDimension.group().reduceSum(d => d.y);\n\n return {\n range: null,\n resolution: 'minute',\n filter: '',\n loading: false,\n renderResultTable: true,\n histogramDataAvailable: true,\n reloadingHistogram: false,\n };\n },\n\n componentDidMount() {\n const onDataTableFiltered = (sourceName) => {\n this.refs.sourcePieChart.setFilter(sourceName);\n this._toggleResetButtons();\n dc.redrawAll();\n this.loadHistogramData();\n };\n\n const onPieChartFiltered = () => {\n this.loadHistogramData();\n this._toggleResetButtons();\n };\n\n const onLineChartFiltered = (filter) => {\n if (filter) {\n SearchStore.changeTimeRange('absolute', {\n from: new DateTime(filter[0]).toString(),\n to: new DateTime(filter[1]).toString(),\n });\n } else {\n this.syncRangeWithQuery();\n }\n };\n\n this.refs.sourceDataTable.renderDataTable(this.messageCountDimension, this.nameMessageGroup, onDataTableFiltered);\n this.refs.sourcePieChart.renderPieChart(this.nameDimension, this.nameMessageGroup, onPieChartFiltered);\n this.refs.sourceLineChart.renderLineChart(this.valueDimension, this.valueGroup, onLineChartFiltered);\n this.applyRangeParameter();\n dc.renderAll();\n window.addEventListener('resize', this._resizeCallback);\n $(window).on('hashchange', this._applyRangeFromHash);\n // register them live as we do not know if those buttons are currently in the DOM\n $(document).on('click', '.sidebar-hide', this._updateWidth);\n $(document).on('click', '.sidebar-show', this._updateWidth);\n UniversalSearch.init();\n },\n\n componentWillUnmount() {\n window.removeEventListener('resize', this._resizeCallback);\n $(window).off('hashchange', this._applyRangeFromHash);\n $(document).off('click', '.sidebar-hide', this._updateWidth);\n $(document).off('click', '.sidebar-show', this._updateWidth);\n },\n\n setSearchFilter(filter) {\n this.setState({ filter: filter }, () => {\n this._filterSources();\n this.refs.sourceDataTable.redraw();\n this.refs.sourcePieChart.redraw();\n });\n },\n\n NUMBER_OF_TOP_VALUES: 10,\n eventThrottler: new EventHandlersThrottler(),\n\n loadData() {\n this.loadSources();\n this.loadHistogramData();\n },\n\n loadSources() {\n const onLoaded = (sources) => {\n this._resetSources(sources);\n this.setState({ renderResultTable: this.sourcesData.size() !== 0, loading: false });\n this._updateWidth();\n };\n\n SourcesStore.loadSources(this.state.range, onLoaded);\n },\n\n _resetSources(sources) {\n /*\n * http://stackoverflow.com/questions/23500546/replace-crossfilter-data-restore-dimensions-and-groups\n * It looks like dc interacts with crossfilter to represent the graphs and apply some filters\n * on the crossfilter dimension, but it also stores those filters internally. That means that\n * we need to remove the dimension and graphs filters, but we only need to reapply filters to the\n * graphs, dc will propagate that to the crossfilter dimension.\n */\n const pieChartFilters = this.refs.sourcePieChart.getFilters();\n const dataTableFilters = this.refs.sourceDataTable.getFilters();\n this.nameDimension.filterAll();\n this.filterDimension.filterAll();\n this.refs.sourcePieChart.clearFilters();\n this.refs.sourceDataTable.clearFilters();\n this.sourcesData.remove();\n this.sourcesData.add(sources);\n\n pieChartFilters.forEach(filter => this.refs.sourcePieChart.setFilter(filter));\n dataTableFilters.forEach(filter => this.refs.sourceDataTable.setFilter(filter));\n this._filterSources();\n\n dc.redrawAll();\n },\n\n loadHistogramData() {\n let filters;\n\n if (this.refs.sourcePieChart.getFilters().length !== 0 || this.refs.sourceDataTable.getFilters().length !== 0) {\n filters = this.nameDimension.top(Infinity).map(source => UniversalSearch.escape(source.name));\n }\n\n HistogramDataActions.load(this.state.range, filters, SCREEN_RESOLUTION)\n .then((histogramData) => {\n this.setState({\n resolution: histogramData.interval,\n reloadingHistogram: false,\n histogramDataAvailable: histogramData.histogram.length >= 2,\n });\n this._resetHistogram(histogramData.histogram);\n });\n\n this.setState({ reloadingHistogram: true });\n },\n\n _resetHistogram(histogram) {\n const lineChartFilters = this.refs.sourceLineChart.getFilters();\n this.valueDimension.filterAll();\n this.refs.sourceLineChart.clearFilters();\n this.histogramData.remove();\n this.histogramData.add(histogram);\n\n lineChartFilters.forEach(filter => this.refs.sourceLineChart.setFilter(filter));\n\n dc.redrawAll();\n },\n\n _resizeCallback() {\n this.eventThrottler.throttle(() => this._updateWidth());\n },\n\n // redirect old range format (as query parameter) to new format (deep link)\n _redirectToRange(range) {\n // if range is ill formatted, we take care of it in the deep link handling\n window.location.replace(`sources#${range}`);\n },\n\n _getRangeFromOldQueryFormat() {\n let query = window.location.search;\n if (query) {\n if (query.indexOf('?') === 0 && query.length > 1) {\n query = query.substr(1, query.length - 1);\n const range = Qs.parse(query).range;\n if (range) {\n return range;\n }\n }\n }\n return null;\n },\n\n _applyRangeFromHash() {\n const range = this._getRangeFromHash();\n this.changeRange(range, false);\n },\n\n applyRangeParameter() {\n const range = this._getRangeFromOldQueryFormat();\n if (range) {\n this._redirectToRange(range);\n } else {\n this._applyRangeFromHash();\n }\n },\n\n _getRangeFromHash() {\n const hash = window.location.hash;\n if (hash.indexOf('#') !== 0) {\n return DEFAULT_RANGE_IN_SECS;\n }\n const hashContent = hash.substring(1);\n if (hash.indexOf('&') < 0) {\n // If there is only one param in the hash, return it\n return hashContent;\n }\n // If there are more than one params in the hash, return the numeric one\n const match = hashContent.match(/(\\d+)=&/);\n return (match && match.length > 0) ? match[1] : DEFAULT_RANGE_IN_SECS;\n },\n\n resetSourcesFilters() {\n this.refs.sourcePieChart.clearFilters();\n this.nameDimension.filterAll();\n this.loadHistogramData();\n this._toggleResetButtons();\n dc.redrawAll();\n },\n\n resetHistogramFilters() {\n this.valueDimension.filterAll();\n this.refs.sourceLineChart.clearFilters();\n dc.redrawAll();\n },\n\n _updateWidth() {\n SCREEN_RESOLUTION = $(window).width();\n this.refs.sourcePieChart.updateWidth();\n this.refs.sourceLineChart.updateWidth();\n dc.renderAll();\n },\n\n syncRangeWithQuery() {\n const rangeSelectBox = this.refs.rangeSelector;\n if (Number(rangeSelectBox.value) === 0) {\n SearchStore.changeTimeRange('relative', { relative: 0 });\n } else {\n const $selectedOptions = $(':selected', rangeSelectBox);\n const text = $selectedOptions && $selectedOptions[0] && $selectedOptions[0].text;\n SearchStore.changeTimeRange('keyword', { keyword: text });\n }\n },\n\n _toggleResetButtons() {\n // We only need to toggle the datatable reset button, dc will take care of the other reset buttons\n if (this.refs.sourcePieChart.getFilters().length !== 0) {\n $('#dc-sources-result-reset').show();\n } else {\n $('#dc-sources-result-reset').hide();\n }\n },\n\n changeRange(range, keepChangeInHistory) {\n let effectiveRange = range;\n\n if (effectiveRange !== undefined) {\n effectiveRange = Number(effectiveRange);\n }\n\n if (typeof effectiveRange === 'undefined' || SUPPORTED_RANGES_IN_SECS.indexOf(effectiveRange) === -1) {\n effectiveRange = DEFAULT_RANGE_IN_SECS;\n }\n\n if (this.state.range === effectiveRange) {\n return;\n }\n\n // when range is changed the filter in line chart (corresponding to the brush) does not make any sense any more\n this.valueDimension.filterAll();\n this.refs.sourceLineChart.clearFilters();\n this.syncRangeWithQuery();\n if (keepChangeInHistory) {\n window.location.hash = `#${effectiveRange}`;\n } else {\n window.location.replace(`#${effectiveRange}`);\n }\n this.setState({ range: effectiveRange, histogramDataAvailable: true, loading: true }, () => this.loadData());\n },\n\n _onRangeChanged(event) {\n const value = event.target.value;\n this.changeRange(value, true);\n },\n\n _filterSources() {\n this.filterDimension.filter((name) => {\n return name.indexOf(this.state.filter) !== -1;\n });\n },\n\n render() {\n const emptySources = (\n
\n
\n
\n No message sources found for this time range. Did you try using a different one?\n
\n
\n
\n );\n\n const resultsStyle = (this.state.renderResultTable ? null : { display: 'none' });\n const results = (\n
\n
\n \n
\n {this.state.loading ?\n
:\n null}\n
\n
\n \n
\n
\n \n
\n
\n
\n );\n\n return (\n
\n
\n
\n
\n
\n \n
\n

Sources

\n
\n

\n This is a list of all sources that sent in messages to Graylog. Note that the list is\n cached for a few seconds so you might have to wait a bit until a new source appears.\n

\n\n \n {' Use your mouse to interact with the table and graphs on this page, and get a better ' +\n 'overview of the sources sending data into Graylog.'}\n \n
\n
\n\n {this.state.renderResultTable ? null : emptySources}\n {results}\n\n
\n );\n },\n});\n\nexport default SourceOverview;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sources/SourceOverview.jsx","import PropTypes from 'prop-types';\nimport React from 'react';\nimport $ from 'jquery';\nimport d3 from 'd3';\nimport dc from 'dc';\nimport numeral from 'numeral';\n\nimport SourceTitle from './SourceTitle';\nimport UniversalSearch from 'logic/search/UniversalSearch';\nimport StringUtils from 'util/StringUtils';\n\nimport StoreProvider from 'injection/StoreProvider';\nconst SearchStore = StoreProvider.getStore('Search');\n\nconst SourceDataTable = React.createClass({\n propTypes: {\n numberOfTopValues: PropTypes.number.isRequired,\n resetFilters: PropTypes.func.isRequired,\n setSearchFilter: PropTypes.func.isRequired,\n },\n\n getInitialState() {\n return {\n numberOfSources: 100,\n };\n },\n\n _getAddToSearchButton(source) {\n const addToSearchButton = document.createElement('button');\n addToSearchButton.className = 'btn btn-xs btn-default dc-search-button';\n addToSearchButton.title = 'Add to search query';\n addToSearchButton.setAttribute('data-source', StringUtils.unescapeHTML(source));\n addToSearchButton.innerHTML = \"\";\n\n return addToSearchButton.outerHTML;\n },\n\n renderDataTable(dimension, group, onDataFiltered) {\n const dataTableDomNode = $('#dc-sources-result')[0];\n this._dataTable = dc.dataTable(dataTableDomNode);\n this._dataTable\n .dimension(dimension)\n .group((d) => {\n const topValues = group.top(this.props.numberOfTopValues);\n const dInTopValues = topValues.some(value => d.name.localeCompare(value.key) === 0);\n return (dInTopValues ? 'Top sources' : 'Others');\n })\n .size(this.state.numberOfSources)\n .columns([\n d => `${d.name}`,\n d => `${d.percentage.toFixed(2)}%`,\n d => numeral(d.message_count).format('0,0'),\n d => this._getAddToSearchButton(d.name),\n ])\n .sortBy(d => d.message_count)\n .order(d3.descending)\n .on('renderlet', (table) => {\n table.selectAll('.dc-table-group').classed('info', true);\n this._addSourceToSearchBarListener(table);\n this._filterSourceListener(table, onDataFiltered);\n });\n },\n\n _addSourceToSearchBarListener(table) {\n table.selectAll('td.dc-table-column .dc-search-button').on('click', () => {\n const source = $(d3.event.target).closest('button').data('source');\n SearchStore.addSearchTerm('source', source, UniversalSearch.orOperator());\n });\n },\n\n _filterSourceListener(table, onDataFiltered) {\n table.selectAll('td.dc-table-column a.dc-filter-link').on('click', () => {\n const parentTdElement = $(d3.event.target).parents('td.dc-table-column._0');\n const datum = d3.selectAll(parentTdElement).datum();\n\n onDataFiltered(datum.name);\n });\n },\n\n redraw() {\n this._dataTable.redraw();\n },\n\n clearFilters() {\n this._dataTable.filterAll();\n },\n\n getFilters() {\n return (this._dataTable ? this._dataTable.filters() : []);\n },\n\n setFilter(filter) {\n this._dataTable.filter(filter);\n },\n\n changeNumberOfSources(numberOfSources) {\n this._dataTable\n .size(numberOfSources)\n .redraw();\n },\n\n _onNumberOfSourcesChanged(event) {\n this.setState({ numberOfSources: event.target.value }, () => {\n this.changeNumberOfSources(this.state.numberOfSources);\n });\n },\n\n _onFilterChanged(event) {\n this.props.setSearchFilter(event.target.value);\n },\n\n render() {\n const resultTable = (\n \n \n \n \n \n \n \n \n
NamePercentageMessage count\n
\n );\n\n return (\n
\n \n Selected sources\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n {resultTable}\n
\n );\n },\n});\n\nexport default SourceDataTable;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sources/SourceDataTable.jsx","import $ from 'jquery';\nimport dc from 'dc';\nimport numeral from 'numeral';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport SourceTitle from './SourceTitle';\nimport D3Utils from 'util/D3Utils';\n\nconst SourcePieChart = React.createClass({\n propTypes: {\n resetFilters: PropTypes.func.isRequired,\n numberOfTopValues: PropTypes.number.isRequired,\n },\n\n getFilters() {\n return this._pieChart ? this._pieChart.filters() : [];\n },\n\n setFilter(filter) {\n this._pieChart.filter(filter);\n },\n\n clearFilters() {\n this._pieChart.filterAll();\n },\n\n redraw() {\n this._pieChart.redraw();\n },\n\n _configureWidth(pieChartWidth) {\n this._pieChart.width(pieChartWidth)\n .height(pieChartWidth)\n .radius(pieChartWidth / 2 - 10)\n .innerRadius(pieChartWidth / 5);\n },\n\n updateWidth() {\n const $pieChartDomNode = $('#dc-sources-pie-chart').parent();\n const pieChartWidth = $pieChartDomNode.width();\n this._configureWidth(pieChartWidth);\n },\n\n renderPieChart(dimension, group, onDataFiltered) {\n const pieChartDomNode = $('#dc-sources-pie-chart')[0];\n const pieChartWidth = $(pieChartDomNode).width();\n this._pieChart = dc.pieChart(pieChartDomNode);\n this._pieChart\n .renderLabel(false)\n .dimension(dimension)\n .group(group)\n .colors(D3Utils.glColourPalette())\n .slicesCap(this.props.numberOfTopValues)\n .title((d) => {\n return `${d.key}: ${numeral(d.value).format('0,0')}`;\n })\n .on('renderlet', (chart) => {\n chart.selectAll('.pie-slice').on('click', () => {\n onDataFiltered();\n });\n });\n this._configureWidth(pieChartWidth);\n },\n\n render() {\n return (\n
\n Messages per source\n
\n );\n },\n});\n\nexport default SourcePieChart;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sources/SourcePieChart.jsx","import PropTypes from 'prop-types';\nimport React from 'react';\nimport $ from 'jquery';\nimport {} from 'jquery-ui/ui/effects/effect-bounce';\nimport dc from 'dc';\nimport d3 from 'd3';\n\nimport UniversalSearch from 'logic/search/UniversalSearch';\nimport SourceTitle from './SourceTitle';\nimport D3Utils from 'util/D3Utils';\n\nimport graphHelper from 'legacy/graphHelper';\n\nconst SourceLineChart = React.createClass({\n propTypes: {\n histogramDataAvailable: PropTypes.bool.isRequired,\n reloadingHistogram: PropTypes.bool.isRequired,\n resetFilters: PropTypes.func.isRequired,\n resolution: PropTypes.string.isRequired,\n },\n\n getInitialState() {\n return {\n lineChartWidth: '100%',\n };\n },\n\n getFilters() {\n return this._lineChart ? this._lineChart.filters() : [];\n },\n\n setFilter(filter) {\n this._lineChart.filter(filter);\n },\n\n clearFilters() {\n this._lineChart.filterAll();\n },\n\n _configureWidth(lineChartWidth) {\n this._lineChart.width(lineChartWidth);\n this.setState({ lineChartWidth: `${String(lineChartWidth)}px` });\n },\n\n updateWidth() {\n const $lineChartDomNode = $('#dc-sources-line-chart');\n const lineChartWidth = $lineChartDomNode.width();\n this._configureWidth(lineChartWidth);\n },\n\n renderLineChart(dimension, group, onDataFiltered) {\n const lineChartDomNode = $('#dc-sources-line-chart')[0];\n const width = $(lineChartDomNode).width();\n $(document).on('mouseup', '#dc-sources-line-chart svg', (event) => {\n $('.timerange-selector-container').effect('bounce', {\n complete: () => {\n // Submit search directly if alt key is pressed.\n if (event.altKey) {\n UniversalSearch.submit();\n }\n },\n });\n });\n this._lineChart = dc.lineChart(lineChartDomNode);\n this._lineChart\n .height(200)\n .margins({ left: 35, right: 20, top: 20, bottom: 20 })\n .dimension(dimension)\n .group(group)\n .x(d3.time.scale())\n .renderHorizontalGridLines(true)\n // FIXME: causes those nasty exceptions when rendering data (one per x axis tick)\n .elasticX(true)\n .elasticY(true)\n .transitionDuration(30)\n .colors(D3Utils.glColourPalette())\n .on('filtered', (chart) => {\n dc.events.trigger(() => {\n const filter = chart.filter();\n onDataFiltered(filter);\n });\n });\n this._configureWidth(width);\n this._lineChart.xAxis()\n .ticks(graphHelper.customTickInterval())\n .tickFormat(graphHelper.customDateTimeFormat());\n this._lineChart.yAxis()\n .ticks(6)\n .tickFormat(d3.format('s'));\n },\n\n render() {\n const loadingSpinnerStyle = {\n display: this.props.reloadingHistogram ? 'block' : 'none',\n width: this.state.lineChartWidth,\n };\n const loadingSpinner = (\n
\n \n
\n );\n\n const noDataOverlayStyle = {\n display: this.props.histogramDataAvailable ? 'none' : 'block',\n width: this.state.lineChartWidth,\n };\n const noDataOverlay = (\n
Not enough data
\n );\n return (\n
\n \n Messages per {this.props.resolution}\n \n {loadingSpinner}\n {noDataOverlay}\n
\n );\n },\n});\n\nexport default SourceLineChart;\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/sources/SourceLineChart.jsx"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy