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

web-interface.assets.29.29.a37bd6c43e2b13149f99.js.map Maven / Gradle / Ivy

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy