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

web-interface.assets.b6fe2bb5-4875.6cdad467a28a30fc6a0a.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.2
Show newest version
{"version":3,"file":"b6fe2bb5-4875.6cdad467a28a30fc6a0a.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/event-definitions/common/HelpPanel.css?2904","webpack://graylog-web-interface/./src/components/event-definitions/common/HelpPanel.jsx","webpack://graylog-web-interface/./src/components/lookup-table-parameters/LookupTableParameterEdit.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-form/EditQueryParameterModal.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterForm.jsx","webpack://graylog-web-interface/./src/stores/event-definitions/FilterPreviewStore.js","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterPreview.css?107f","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterPreview.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterPreviewContainer.jsx","webpack://graylog-web-interface/./src/logic/alerts/AggregationExpressionConfig.js","webpack://graylog-web-interface/./src/logic/alerts/AggregationExpressionValidation.js","webpack://graylog-web-interface/./src/logic/alerts/AggregationExpressionTypes.js","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/NumberExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/NumberRefExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/BooleanOperatorSelector.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/BooleanExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/ComparisonExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpressions/GroupExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpression.css?3b95","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpression.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionsFormSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionsForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationForm.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterAggregationForm.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/withStreams.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterAggregationFormContainer.tsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterAggregationSummary.css?f7a9","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterAggregationSummary.jsx","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/index.js","webpack://graylog-web-interface/./src/stores/event-definitions/EventDefinitionsStore.js","webpack://graylog-web-interface/./src/stores/lookup-tables/LookupTablesStore.ts","webpack://graylog-web-interface/./src/util/SortUtils.js","webpack://graylog-web-interface/./src/components/event-definitions/common/HelpPanel.css","webpack://graylog-web-interface/./src/components/event-definitions/common/commonStyles.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/AggregationConditionExpression.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterAggregationSummary.css","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterPreview.css","webpack://graylog-web-interface/./src/components/event-definitions/common/commonStyles.css?cb62"],"sourcesContent":["\n      import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./HelpPanel.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./HelpPanel.css\";\n       export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { Panel } from 'components/bootstrap';\nimport { Icon } from 'components/common';\n\nimport styles from './HelpPanel.css';\n\nconst IconHeader = styled(Icon)`\n  margin-right: 9px;\n`;\n\nconst ConditionalCollapse = ({ condition, wrapper, children }) => (condition ? wrapper(children) : children);\n\nexport const HelpPanel = ({ bsStyle, children, className, collapsible, header, title, defaultExpanded }) => {\n  const defaultHeader = 

{title}

;\n\n return (\n \n \n \n {header || defaultHeader}\n \n \n {wrapChild}}>\n \n {children}\n \n \n \n );\n};\n\nHelpPanel.propTypes = {\n bsStyle: PropTypes.oneOf(['success', 'warning', 'danger', 'info', 'default', 'primary']),\n children: PropTypes.node,\n className: PropTypes.string,\n collapsible: PropTypes.bool,\n header: PropTypes.node,\n title: PropTypes.string,\n defaultExpanded: PropTypes.bool,\n};\n\nHelpPanel.defaultProps = {\n bsStyle: 'info',\n children: undefined,\n className: '',\n collapsible: false,\n header: undefined,\n title: '',\n defaultExpanded: false,\n};\n\nexport default HelpPanel;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport styled from 'styled-components';\n\nimport { Panel, Input } from 'components/bootstrap';\nimport Select from 'components/common/Select';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport Spinner from 'components/common/Spinner';\nimport type { LookupTable } from 'logic/lookup-tables/types';\n\nconst StyledInlineCode = styled('code')`\n margin: 0 0.25em;\n white-space: nowrap;\n`;\n\ntype Props = {\n onChange: (fieldName: string, value: string) => void\n lookupTables: Array\n identifier: string | number,\n defaultExpandHelp?: boolean,\n parameter?: {\n lookupTable?: string,\n key?: string,\n defaultValue?: string\n name?: string,\n },\n validationState?: {\n lookupTable?: [string, string],\n key?: [string, string],\n }\n};\n\nconst LookupTableParameterEdit = ({\n validationState,\n onChange,\n lookupTables,\n identifier,\n parameter,\n defaultExpandHelp,\n}: Props) => {\n const { lookupTable, key: tableKey, defaultValue, name } = parameter;\n const parameterSyntax = `$${name}$`;\n\n const _handleChange = (fieldName: string) => (value) => {\n onChange(fieldName, value);\n };\n\n const _handleInputChange = (attributeName: string) => ({ target: { value } }: React.ChangeEvent) => _handleChange(attributeName)(value);\n\n if (!lookupTables) {\n return ;\n }\n\n const lookupTableOptions = lookupTables.sort((lt1, lt2) => naturalSortIgnoreCase(lt1.title, lt2.title))\n .map((table) => ({ label: table.title, value: table.name }));\n\n return (\n <>\n \n \n \n\n \n \n \n How to use lookup table parameters\n \n \n \n \n
General Usage
\n

\n After declaring it, the parameter\n {parameterSyntax}\n in your query, will be replaced with the list of results from the lookup table.\n The list of results will be presented in the form of a Lucene BooleanQuery. E.g.:\n ("foo" OR "bar" OR "baz")\n

\n
Behaviour on empty lookup result list
\n

\n The event definition query is only executed if a value for the parameter is present.\n If the lookup result is empty, the execution will be skipped and treated as if the Search Query found\n no messages. If an execution is desired a Default Value that yields the desired search result\n needs to be provided. For example, (depending on the use case) a wildcard like\n *\n can be a meaningful Default Value.\n

\n
Limitations
\n

\n Please note that maximum number of supported results is 1024. If the lookup table returns\n more results, the query is not executed.\n

\n
\n
\n
\n \n );\n};\n\nLookupTableParameterEdit.defaultProps = {\n parameter: {},\n validationState: {},\n defaultExpandHelp: true,\n};\n\nexport default LookupTableParameterEdit;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\nimport React from 'react';\n\nimport LookupTableParameterEdit from 'components/lookup-table-parameters/LookupTableParameterEdit';\nimport { Button, BootstrapModalForm } from 'components/bootstrap';\nimport type { LookupTable } from 'logic/lookup-tables/types';\nimport type { LookupTableParameterJson } from 'views/logic/parameters/LookupTableParameter';\nimport type LookupTableParameter from 'views/logic/parameters/LookupTableParameter';\n\ntype Props = {\n queryParameters: Array,\n lookupTables: Array,\n onChange: (newQueryParameters: Array) => void,\n queryParameter: LookupTableParameter,\n embryonic: boolean,\n}\n\ntype State = {\n queryParameter: LookupTableParameter,\n validation: {\n lookupTable?: string,\n key?: string,\n },\n}\n\nclass EditQueryParameterModal extends React.Component {\n static propTypes = {\n queryParameters: PropTypes.array.isRequired,\n queryParameter: PropTypes.object.isRequired,\n lookupTables: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n embryonic: PropTypes.bool.isRequired,\n };\n\n modal: BootstrapModalForm = React.createRef();\n\n constructor(props) {\n super(props);\n\n const { queryParameter } = this.props;\n\n this.state = {\n queryParameter,\n validation: {},\n };\n }\n\n openModal = () => {\n this.modal.open();\n };\n\n _saved = () => {\n const { queryParameter } = this.state;\n\n if (!this._validate(queryParameter)) {\n return;\n }\n\n this.propagateChanges();\n this.modal.close();\n };\n\n _cleanState = () => {\n const { queryParameter } = this.props;\n\n this.setState({ queryParameter });\n };\n\n propagateChanges = () => {\n const { queryParameters, onChange, queryParameter: prevQueryParameter } = this.props;\n const { queryParameter } = this.state;\n const newQueryParameters = [...queryParameters];\n const index = queryParameters.findIndex((p) => p.name === prevQueryParameter.name);\n\n if (index < 0) {\n throw new Error(`Query parameter \"${queryParameter.name}\" not found`);\n }\n\n newQueryParameters[index] = queryParameter.toJSON();\n onChange(newQueryParameters);\n };\n\n handleParameterChange = (key, value) => {\n const { queryParameter } = this.state;\n const nextQueryParameter = queryParameter.toBuilder()[key](value).build();\n\n this.setState({ queryParameter: nextQueryParameter });\n };\n\n _validate = (queryParameter) => {\n const newValidation: State['validation'] = {};\n\n if (!queryParameter.lookupTable) {\n newValidation.lookupTable = 'Cannot be empty';\n }\n\n if (!queryParameter.key) {\n newValidation.key = 'Cannot be empty';\n }\n\n this.setState({ validation: newValidation });\n\n return lodash.isEmpty(newValidation);\n };\n\n render() {\n const { lookupTables, embryonic } = this.props;\n const { queryParameter, validation } = this.state;\n\n const validationState: {\n lookupTable?: [string, string],\n key?: [string, string],\n } = {\n lookupTable: validation.lookupTable ? ['error', validation.lookupTable] : undefined,\n key: validation.key ? ['error', validation.key] : undefined,\n };\n\n return (\n <>\n \n\n { this.modal = ref; }}\n title={`Declare Query Parameter \"${queryParameter.name}\" from Lookup Table`}\n onSubmitForm={this._saved}\n onModalClose={this._cleanState}\n submitButtonText=\"Save\">\n \n \n \n );\n }\n}\n\nexport default EditQueryParameterModal;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\nimport uuid from 'uuid/v4';\nimport moment from 'moment';\n\nimport { MultiSelect, TimeUnitInput } from 'components/common';\nimport connect from 'stores/connect';\nimport Query from 'views/logic/queries/Query';\nimport Search from 'views/logic/search/Search';\nimport { extractDurationAndUnit } from 'components/common/TimeUnitInput';\nimport { Alert, ButtonToolbar, ControlLabel, FormGroup, HelpBlock, Input } from 'components/bootstrap';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport * as FormsUtils from 'util/FormsUtils';\nimport { SearchMetadataActions } from 'views/stores/SearchMetadataStore';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport LookupTableParameter from 'views/logic/parameters/LookupTableParameter';\nimport { LookupTablesActions, LookupTablesStore } from 'stores/lookup-tables/LookupTablesStore';\n\nimport EditQueryParameterModal from '../event-definition-form/EditQueryParameterModal';\nimport commonStyles from '../common/commonStyles.css';\n\nexport const TIME_UNITS = ['HOURS', 'MINUTES', 'SECONDS'];\n\nconst LOOKUP_PERMISSIONS = [\n 'lookuptables:read',\n];\n\nclass FilterForm extends React.Component {\n formatStreamIds = lodash.memoize(\n (streamIds) => {\n const { streams } = this.props;\n\n return streamIds\n .map((streamId) => streams.find((s) => s.id === streamId) || streamId)\n .map((streamOrId) => {\n const stream = (typeof streamOrId === 'object' ? streamOrId : { title: streamOrId, id: streamOrId });\n\n return {\n label: stream.title,\n value: stream.id,\n };\n })\n .sort((s1, s2) => naturalSortIgnoreCase(s1.label, s2.label));\n },\n (streamIds) => streamIds.join('-'),\n );\n\n _parseQuery = lodash.debounce((queryString) => {\n if (!this._userCanViewLookupTables()) {\n return;\n }\n\n const { queryId, searchTypeId } = this.state;\n\n const queryBuilder = Query.builder()\n .id(queryId)\n .query({ type: 'elasticsearch', query_string: queryString })\n .timerange({ type: 'relative', range: 1000 })\n .searchTypes([{\n id: searchTypeId,\n type: 'messages',\n limit: 10,\n offset: 0,\n }]);\n\n const query = queryBuilder.build();\n\n const search = Search.create().toBuilder()\n .queries([query])\n .build();\n\n SearchMetadataActions.parseSearch(search).then((res) => {\n this._syncParamsWithQuery(res.undeclared);\n });\n }, 250);\n\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n lookupTables: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n streams: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n currentUser: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n const { execute_every_ms: executeEveryMs, search_within_ms: searchWithinMs } = props.eventDefinition.config;\n const searchWithin = extractDurationAndUnit(searchWithinMs, TIME_UNITS);\n const executeEvery = extractDurationAndUnit(executeEveryMs, TIME_UNITS);\n\n this.state = {\n searchWithinMsDuration: searchWithin.duration,\n searchWithinMsUnit: searchWithin.unit,\n executeEveryMsDuration: executeEvery.duration,\n executeEveryMsUnit: executeEvery.unit,\n queryId: uuid(),\n searchTypeId: uuid(),\n queryParameterStash: {}, // keep already defined parameters around to ease editing\n };\n }\n\n componentDidMount() {\n if (this._userCanViewLookupTables()) {\n LookupTablesActions.searchPaginated(1, 0, undefined, false);\n }\n }\n\n propagateChange = (key, value) => {\n const { eventDefinition, onChange } = this.props;\n const config = lodash.cloneDeep(eventDefinition.config);\n\n config[key] = value;\n onChange('config', config);\n };\n\n _syncParamsWithQuery = (paramsInQuery) => {\n const { eventDefinition, onChange } = this.props;\n const config = lodash.cloneDeep(eventDefinition.config);\n const queryParameters = config.query_parameters;\n const keptParameters = [];\n const staleParameters = {};\n\n queryParameters.forEach((p) => {\n if (paramsInQuery.has(p.name)) {\n keptParameters.push(p);\n } else {\n staleParameters[p.name] = p;\n }\n });\n\n const { queryParameterStash } = this.state;\n const newParameters = [];\n\n paramsInQuery.forEach((np) => {\n if (!keptParameters.find((p) => p.name === np)) {\n if (queryParameterStash[np]) {\n newParameters.push(queryParameterStash[np]);\n } else {\n newParameters.push(this._buildNewParameter(np));\n }\n }\n });\n\n this.setState({ queryParameterStash: lodash.merge(queryParameterStash, staleParameters) });\n\n config.query_parameters = keptParameters.concat(newParameters);\n onChange('config', config);\n };\n\n _userCanViewLookupTables = () => {\n const { currentUser } = this.props;\n\n return isPermitted(currentUser.permissions, LOOKUP_PERMISSIONS);\n };\n\n _buildNewParameter = (name) => {\n return ({\n name: name,\n embryonic: true,\n type: 'lut-parameter-v1',\n data_type: 'any',\n title: 'new title',\n // has no binding, no need to set binding property\n });\n };\n\n handleQueryChange = (event) => {\n this._parseQuery(event.target.value);\n this.handleConfigChange(event);\n };\n\n handleConfigChange = (event) => {\n const { name } = event.target;\n\n this.propagateChange(name, FormsUtils.getValueFromInput(event.target));\n };\n\n handleStreamsChange = (nextValue) => {\n this.propagateChange('streams', nextValue);\n };\n\n handleTimeRangeChange = (fieldName) => {\n return (nextValue, nextUnit) => {\n const durationInMs = moment.duration(lodash.max([nextValue, 1]), nextUnit).asMilliseconds();\n\n this.propagateChange(fieldName, durationInMs);\n\n const stateFieldName = lodash.camelCase(fieldName);\n\n this.setState({\n [`${stateFieldName}Duration`]: nextValue,\n [`${stateFieldName}Unit`]: nextUnit,\n });\n };\n };\n\n renderQueryParameters = () => {\n const { eventDefinition, onChange, lookupTables, validation } = this.props;\n const { query_parameters: queryParameters } = eventDefinition.config;\n\n const onChangeQueryParameters = (newQueryParameters) => {\n const newConfig = { ...eventDefinition.config, query_parameters: newQueryParameters };\n\n return onChange('config', newConfig);\n };\n\n if (!this._userCanViewLookupTables()) {\n return (\n \n This account lacks permission to declare Query Parameters from Lookup Tables.\n \n );\n }\n\n const parameterButtons = queryParameters.map((queryParam) => {\n return (\n \n );\n });\n\n if (lodash.isEmpty(parameterButtons)) {\n return null;\n }\n\n const hasEmbryonicParameters = !lodash.isEmpty(queryParameters.filter((param) => (param.embryonic)));\n\n return (\n \n Query Parameters\n \n \n {parameterButtons}\n \n \n {hasEmbryonicParameters && (\n \n {validation.errors.query_parameters\n ? lodash.get(validation, 'errors.query_parameters[0]')\n : 'Please declare missing query parameters by clicking on the buttons above.'}\n \n )}\n \n );\n };\n\n render() {\n const { eventDefinition, streams, validation } = this.props;\n const { searchWithinMsDuration, searchWithinMsUnit, executeEveryMsDuration, executeEveryMsUnit } = this.state;\n\n // Ensure deleted streams are still displayed in select\n const allStreamIds = lodash.union(streams.map((s) => s.id), lodash.defaultTo(eventDefinition.config.streams, []));\n const formattedStreams = this.formatStreamIds(allStreamIds);\n\n return (\n
\n

Filter

\n

Add information to filter the log messages that are relevant for this Event Definition.

\n \n Search query that Messages should match. You can use the same syntax as in the Search page,\n including declaring Query Parameters from Lookup Tables by using the $newParameter$ syntax.\n \n )}\n value={lodash.defaultTo(eventDefinition.config.query, '')}\n onChange={this.handleQueryChange} />\n\n {this.renderQueryParameters()}\n\n \n Streams (Optional)\n this.handleStreamsChange(selected === '' ? [] : selected.split(','))}\n options={formattedStreams}\n value={lodash.defaultTo(eventDefinition.config.streams, []).join(',')} />\n Select streams the search should include. Searches in all streams if empty.\n \n\n \n \n {validation.errors.search_within_ms && (\n {lodash.get(validation, 'errors.search_within_ms[0]')}\n )}\n \n\n \n \n {validation.errors.execute_every_ms && (\n {lodash.get(validation, 'errors.execute_every_ms[0]')}\n )}\n \n \n
\n );\n }\n}\n\nexport default connect(FilterForm, {\n lookupTables: LookupTablesStore,\n});\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport URI from 'urijs';\nimport lodash from 'lodash';\nimport Bluebird from 'bluebird';\n\nimport * as URLUtils from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport UserNotification from 'util/UserNotification';\nimport Search from 'views/logic/search/Search';\nimport SearchResult from 'views/logic/SearchResult';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const FilterPreviewActions = singletonActions(\n 'core.FilterPreview',\n () => Reflux.createActions({\n create: { asyncResult: true },\n execute: { asyncResult: true },\n search: { asyncResult: true },\n }),\n);\n\nexport const FilterPreviewStore = singletonStore(\n 'core.FilterPreview',\n () => Reflux.createStore({\n listenables: [FilterPreviewActions],\n sourceUrl: '/views/search',\n searchJob: undefined,\n result: undefined,\n\n getInitialState() {\n return this.getState();\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n getState() {\n return {\n searchJob: this.searchJob,\n result: this.result,\n };\n },\n\n resourceUrl({ segments = [], query = {} }) {\n const uri = new URI(this.sourceUrl);\n const nextSegments = lodash.concat(uri.segment(), segments);\n\n uri.segmentCoded(nextSegments);\n uri.query(query);\n\n return URLUtils.qualifyUrl(uri.resource());\n },\n\n /**\n * Method that creates a search query in the backend. This method does not execute the search, please call\n * `execute()` once the response of `create()` is resolved to execute the search.\n */\n create(searchRequest) {\n const newSearch = searchRequest.toBuilder()\n .newId()\n .build();\n const promise = fetch('POST', this.resourceUrl({}), JSON.stringify(newSearch));\n\n promise.then((response) => {\n this.searchJob = Search.fromJSON(response);\n this.result = undefined;\n this.propagateChanges();\n\n return response;\n });\n\n FilterPreviewActions.create.promise(promise);\n },\n\n trackJobStatus(job, search) {\n return new Bluebird((resolve) => {\n if (job && job.execution.done) {\n return resolve(new SearchResult(job));\n }\n\n return resolve(Bluebird.delay(250)\n .then(() => this.jobStatus(job.id))\n .then((jobStatus) => this.trackJobStatus(jobStatus, search)));\n });\n },\n\n run(search, executionState) {\n return fetch('POST', this.resourceUrl({ segments: [search.id, 'execute'] }), JSON.stringify(executionState));\n },\n\n jobStatus(jobId) {\n return fetch('GET', this.resourceUrl({ segments: ['status', jobId] }));\n },\n\n trackJob(search, executionState) {\n return this.run(search, executionState).then((job) => this.trackJobStatus(job, search));\n },\n\n /**\n * Method that executes a search in the backend and wait until its results are ready.\n * Take into account that you need to create the search before you execute it.\n */\n execute(executionState) {\n if (this.executePromise) {\n this.executePromise.cancel();\n }\n\n if (this.searchJob) {\n this.executePromise = this.trackJob(this.searchJob, executionState)\n .then(\n (result) => {\n this.result = result;\n this.executePromise = undefined;\n this.propagateChanges();\n\n return result;\n },\n () => UserNotification.error('Could not execute search'),\n );\n\n FilterPreviewActions.execute.promise(this.executePromise);\n\n return this.executePromise;\n }\n\n throw new Error('Unable to execute search if no search was created before!');\n },\n\n search(searchRequest, executionState) {\n FilterPreviewActions.create(searchRequest)\n .then(() => FilterPreviewActions.execute(executionState));\n },\n }),\n);\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./FilterPreview.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./FilterPreview.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { Panel, Table } from 'components/bootstrap';\nimport { Spinner } from 'components/common';\nimport HelpPanel from 'components/event-definitions/common/HelpPanel';\n\nimport styles from './FilterPreview.css';\n\nclass FilterPreview extends React.Component {\n static propTypes = {\n searchResult: PropTypes.object,\n errors: PropTypes.array,\n isFetchingData: PropTypes.bool,\n displayPreview: PropTypes.bool,\n };\n\n static defaultProps = {\n searchResult: {},\n errors: [],\n isFetchingData: false,\n displayPreview: false,\n };\n\n renderMessages = (messages) => {\n return messages.map(({ index, message }) => {\n return (\n \n {message.timestamp}\n {message.message}\n \n );\n });\n };\n\n renderSearchResult = (searchResult = {}) => {\n if (!searchResult.messages || searchResult.messages.length === 0) {\n return

Could not find any messages with the current search criteria.

;\n }\n\n return (\n \n \n \n \n \n \n \n \n {this.renderMessages(searchResult.messages)}\n \n
TimestampMessage
\n );\n };\n\n render() {\n const { isFetchingData, searchResult, errors, displayPreview } = this.props;\n\n const renderedResults = isFetchingData ? : this.renderSearchResult(searchResult);\n\n return (\n <>\n \n

\n The Filter & Aggregation Condition will generate different number of Events, depending on how it is\n configured:\n

\n
    \n
  • Filter: One Event per message matching the filter
  • \n
  • \n Aggregation without groups: One Event every time the aggregation result satisfies\n the condition\n
  • \n
  • \n Aggregation with groups: One Event per group whose aggregation result satisfies\n the condition\n
  • \n
\n
\n\n {displayPreview && (\n \n \n Filter Preview\n \n \n {errors.length > 0 ?

{errors[0].description}

: renderedResults}\n
\n
\n )}\n \n );\n }\n}\n\nexport default FilterPreview;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\nimport uuid from 'uuid/v4';\n\nimport Query from 'views/logic/queries/Query';\nimport Search from 'views/logic/search/Search';\nimport connect from 'stores/connect';\nimport PermissionsMixin from 'util/PermissionsMixin';\nimport { CurrentUserStore } from 'stores/users/CurrentUserStore';\nimport { FilterPreviewStore, FilterPreviewActions } from 'stores/event-definitions/FilterPreviewStore';\n\nimport FilterPreview from './FilterPreview';\n\nclass FilterPreviewContainer extends React.Component {\n state = {\n queryId: uuid(),\n searchTypeId: uuid(),\n };\n\n fetchSearch = lodash.debounce((config) => {\n const { currentUser } = this.props;\n\n if (!this.isPermittedToSeePreview(currentUser, config)) {\n return;\n }\n\n const { queryId, searchTypeId } = this.state;\n\n const formattedStreams = config.streams.map((stream) => ({ type: 'stream', id: stream }));\n\n const queryBuilder = Query.builder()\n .id(queryId)\n .query({ type: 'elasticsearch', query_string: config.query || '*' })\n .timerange({ type: 'relative', range: config.search_within_ms / 1000 })\n .filter(formattedStreams.length === 0 ? null : { type: 'or', filters: formattedStreams })\n .searchTypes([{\n id: searchTypeId,\n type: 'messages',\n limit: 10,\n offset: 0,\n }]);\n\n const query = queryBuilder.build();\n\n const search = Search.create().toBuilder()\n .parameters(config.query_parameters.filter((param) => (!param.embryonic)))\n .queries([query])\n .build();\n\n FilterPreviewActions.search(search);\n }, 250);\n\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n filterPreview: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n };\n\n componentDidMount() {\n const { eventDefinition } = this.props;\n\n this.fetchSearch(eventDefinition.config);\n }\n\n componentDidUpdate(prevProps) {\n const { eventDefinition } = this.props;\n\n const { query: prevQuery, query_parameters: prevQueryParameters, streams: prevStreams, search_within_ms: prevSearchWithin } = prevProps.eventDefinition.config;\n const { query, query_parameters: queryParameters, streams, search_within_ms: searchWithin } = eventDefinition.config;\n\n if (query !== prevQuery || queryParameters !== prevQueryParameters || !lodash.isEqual(streams, prevStreams) || searchWithin !== prevSearchWithin) {\n this.fetchSearch(eventDefinition.config);\n }\n }\n\n isPermittedToSeePreview = (currentUser, config) => {\n const missingPermissions = config.streams.some((stream) => {\n return !PermissionsMixin.isPermitted(currentUser.permissions, `streams:read:${stream}`);\n });\n\n return !missingPermissions;\n };\n\n render() {\n const { eventDefinition, filterPreview, currentUser } = this.props;\n const { queryId, searchTypeId } = this.state;\n const isLoading = !filterPreview.result || !filterPreview.result.forId(queryId);\n let searchResult;\n let errors;\n\n if (!isLoading) {\n searchResult = filterPreview.result.forId(queryId).searchTypes[searchTypeId];\n // eslint-disable-next-line prefer-destructuring\n errors = filterPreview.result.errors; // result may not always be set, so I can't use destructuring\n }\n\n return (\n \n );\n }\n}\n\nexport default connect(FilterPreviewContainer, {\n filterPreview: FilterPreviewStore,\n currentUser: CurrentUserStore,\n}, ({ currentUser, ...otherProps }) => ({\n ...otherProps,\n currentUser: currentUser.currentUser,\n}));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nexport const emptyComparisonExpressionConfig = () => {\n return {\n expr: undefined,\n left: {\n expr: 'number-ref',\n ref: undefined,\n },\n right: {\n expr: 'number',\n value: 0,\n },\n };\n};\n\nexport const emptyBooleanExpressionConfig = ({ operator = '&&', left = emptyComparisonExpressionConfig(), right = emptyComparisonExpressionConfig() }) => {\n return {\n expr: operator,\n left: left,\n right: right,\n };\n};\n\nexport const emptyGroupExpressionConfig = ({ operator = '&&', child = emptyComparisonExpressionConfig() }) => {\n return {\n expr: 'group',\n operator: operator,\n child: child,\n };\n};\n\n/**\n * Replaces all boolean expressions inside the current tree, without affecting any internal groups.\n */\nexport const replaceBooleanExpressionOperatorInGroup = (nextOperator, expression) => {\n const nextExpression = { ...expression };\n\n if (expression.expr === '&&' || expression.expr === '||') {\n nextExpression.expr = nextOperator;\n nextExpression.left = replaceBooleanExpressionOperatorInGroup(nextOperator, nextExpression.left);\n nextExpression.right = replaceBooleanExpressionOperatorInGroup(nextOperator, nextExpression.right);\n }\n\n return nextExpression;\n};\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { union } from 'lodash';\n\nconst flattenValidationTree = (validationTree, errors = []) => {\n if (validationTree.message) {\n return union(errors, [validationTree.message]);\n }\n\n if (validationTree.left) {\n return union(errors, flattenValidationTree(validationTree.left), flattenValidationTree(validationTree.right));\n }\n\n if (validationTree.child) {\n return union(errors, flattenValidationTree(validationTree.child));\n }\n\n return errors;\n};\n\nconst validateExpressionTree = (expression, series, validationTree = {}) => {\n switch (expression.expr) {\n case 'number':\n return (Number.isFinite(expression.value) ? {} : { message: 'Threshold must be a valid number' });\n case 'number-ref':\n /* eslint-disable no-case-declarations */\n const error = { message: 'Function must be set' };\n\n if (!expression.ref) {\n return error;\n }\n\n const selectedSeries = series.find((s) => s.id === expression.ref);\n\n return (selectedSeries && selectedSeries.function ? {} : error);\n /* eslint-enable no-case-declarations */\n case '&&':\n case '||':\n case '<':\n case '<=':\n case '>':\n case '>=':\n case '==':\n return {\n left: validateExpressionTree(expression.left, series, validationTree),\n right: validateExpressionTree(expression.right, series, validationTree),\n };\n case 'group':\n return { child: validateExpressionTree(expression.child, series, validationTree) };\n default:\n return { message: 'Condition must be set' };\n }\n};\n\nconst validateExpression = (expression, series) => {\n const validationResults = {};\n\n if (!expression) {\n validationResults.isValid = true;\n\n return validationResults;\n }\n\n validationResults.validationTree = validateExpressionTree(expression, series);\n validationResults.errors = flattenValidationTree(validationResults.validationTree);\n validationResults.isValid = validationResults.errors.length === 0;\n\n return validationResults;\n};\n\nexport default validateExpression;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport PropTypes from 'prop-types';\n\nexport const internalNodePropType = PropTypes.shape({\n expr: PropTypes.string,\n left: PropTypes.object,\n right: PropTypes.object,\n});\n\nexport const numberExpressionNodePropType = PropTypes.shape({\n expr: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), // Accept string to allow clearing field\n});\n\nexport const numberRefNodePropType = PropTypes.shape({\n expr: PropTypes.string,\n ref: PropTypes.string,\n});\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { Input, Col } from 'components/bootstrap';\nimport * as FormsUtils from 'util/FormsUtils';\nimport { numberExpressionNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\nconst NumberExpression = ({ expression, onChange, renderLabel, validation }) => {\n const handleChange = (event) => {\n const nextExpression = lodash.cloneDeep(expression);\n\n nextExpression.value = event.target.value === '' ? '' : FormsUtils.getValueFromInput(event.target);\n onChange({ conditions: nextExpression });\n };\n\n return (\n \n \n \n );\n};\n\nNumberExpression.propTypes = {\n expression: numberExpressionNodePropType.isRequired,\n onChange: PropTypes.func.isRequired,\n renderLabel: PropTypes.bool.isRequired,\n validation: PropTypes.object,\n};\n\nNumberExpression.defaultProps = {\n validation: {},\n};\n\nexport default NumberExpression;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\nimport naturalSort from 'javascript-natural-sort';\n\nimport { Select } from 'components/common';\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport { numberRefNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\nconst formatFunctions = (functions) => {\n return functions\n .sort(naturalSort)\n .map((fn) => ({ label: `${fn.toLowerCase()}()`, value: fn }));\n};\n\nconst NumberRefExpression = ({\n aggregationFunctions,\n formattedFields,\n eventDefinition,\n expression,\n onChange,\n renderLabel,\n validation,\n}) => {\n const getSeries = (seriesId) => {\n return eventDefinition.config.series.find((series) => series.id === seriesId);\n };\n\n const createSeries = () => {\n return { id: expression.ref };\n };\n\n const getOrCreateSeries = (seriesId) => {\n return getSeries(seriesId) || createSeries();\n };\n\n const getSeriesId = (currentSeries, func, field) => {\n return `${lodash.defaultTo(func, currentSeries.function)}-${lodash.defaultTo(field, currentSeries.field || '')}`;\n };\n\n const handleFieldChange = ({ nextFunction, nextField }) => {\n const series = lodash.cloneDeep(eventDefinition.config.series);\n const nextSeries = lodash.cloneDeep(getOrCreateSeries(expression.ref));\n const nextSeriesId = getSeriesId(nextSeries, nextFunction, nextField);\n\n if (nextFunction !== undefined) {\n nextSeries.function = nextFunction;\n }\n\n if (nextField !== undefined) {\n nextSeries.field = nextField;\n }\n\n nextSeries.id = nextSeriesId;\n\n const seriesIndex = series.findIndex((s) => s.id === nextSeries.id);\n\n if (seriesIndex >= 0) {\n series[seriesIndex] = nextSeries;\n } else {\n series.push(nextSeries);\n }\n\n const nextExpression = lodash.cloneDeep(expression);\n\n nextExpression.ref = nextSeriesId;\n\n onChange({\n series: series,\n conditions: nextExpression,\n });\n };\n\n const handleAggregationFunctionChange = (nextFunction) => {\n handleFieldChange({ nextFunction });\n };\n\n const handleAggregationFieldChange = (nextField) => {\n handleFieldChange({ nextField });\n };\n\n const series = getSeries(expression.ref) || {};\n\n return (\n \n \n {renderLabel && If}\n \n \n \n \n \n {validation.message && {validation.message}}\n \n \n );\n};\n\nNumberRefExpression.propTypes = {\n aggregationFunctions: PropTypes.array.isRequired,\n eventDefinition: PropTypes.object.isRequired,\n expression: numberRefNodePropType.isRequired,\n formattedFields: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n renderLabel: PropTypes.bool.isRequired,\n validation: PropTypes.object,\n};\n\nNumberRefExpression.defaultProps = {\n validation: {},\n};\n\nexport default NumberRefExpression;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport styled, { css } from 'styled-components';\n\nimport { Col, FormControl, FormGroup } from 'components/bootstrap';\nimport { Select } from 'components/common';\n\nconst OperatorSelector = styled.div(({ theme }) => css`\n margin-bottom: 15px;\n font-size: ${theme.fonts.size.body};\n`);\n\nconst BooleanOperatorSelect = styled(({ isFirstElement, ...props }) => )`\n width: 100px;\n margin-left: ${(props) => (props.isFirstElement ? '' : '1em')};\n margin-right: 1em;\n`;\n\nconst BooleanOperatorSelector = ({ initialText, operator, onOperatorChange }) => {\n return (\n \n \n {initialText && (\n \n {initialText} \n \n )}\n \n ', value: '>' },\n { label: '>=', value: '>=' },\n { label: '=', value: '==' },\n ]}\n value={expression.expr}\n clearable={false} />\n {validation.message && {validation.message}}\n \n \n \n \n \n );\n};\n\nComparisonExpression.propTypes = {\n expression: internalNodePropType.isRequired,\n level: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n onChildChange: PropTypes.func.isRequired,\n renderLabel: PropTypes.bool.isRequired,\n validation: PropTypes.object,\n};\n\nComparisonExpression.defaultProps = {\n validation: {},\n};\n\nexport default ComparisonExpression;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { cloneDeep } from 'lodash';\nimport styled from 'styled-components';\n\nimport { Clearfix } from 'components/bootstrap';\nimport { internalNodePropType } from 'logic/alerts/AggregationExpressionTypes';\nimport { replaceBooleanExpressionOperatorInGroup } from 'logic/alerts/AggregationExpressionConfig';\n\n// eslint-disable-next-line import/no-cycle\nimport BooleanOperatorSelector from './BooleanOperatorSelector';\n\nimport AggregationConditionExpression from '../AggregationConditionExpression';\n\nconst Group = styled.div`\n padding-left: 40px;\n`;\n\nconst GroupExpression = (props) => {\n const { expression, level, onChange, onChildChange, validation } = props;\n\n const handleOperatorChange = (nextOperator) => {\n const nextExpression = cloneDeep(expression);\n\n nextExpression.operator = nextOperator;\n nextExpression.child = replaceBooleanExpressionOperatorInGroup(nextOperator, nextExpression.child);\n onChange({ conditions: nextExpression });\n };\n\n return (\n <>\n \n \n \n \n \n \n );\n};\n\nGroupExpression.propTypes = {\n expression: internalNodePropType.isRequired,\n level: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n onChildChange: PropTypes.func.isRequired,\n validation: PropTypes.object,\n};\n\nGroupExpression.defaultProps = {\n validation: {},\n};\n\nexport default GroupExpression;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./AggregationConditionExpression.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./AggregationConditionExpression.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { Icon } from 'components/common';\nimport { Button, ButtonToolbar, Clearfix, Col, FormGroup } from 'components/bootstrap';\nimport { emptyBooleanExpressionConfig, emptyGroupExpressionConfig, replaceBooleanExpressionOperatorInGroup } from 'logic/alerts/AggregationExpressionConfig';\nimport { internalNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\nimport NumberExpression from './AggregationConditionExpressions/NumberExpression';\nimport NumberRefExpression from './AggregationConditionExpressions/NumberRefExpression';\nimport BooleanOperatorSelector from './AggregationConditionExpressions/BooleanOperatorSelector';\n/* eslint-disable import/no-cycle */\n// We render the expression tree recursively, so complex expressions need to refer back to this component\nimport BooleanExpression from './AggregationConditionExpressions/BooleanExpression';\nimport ComparisonExpression from './AggregationConditionExpressions/ComparisonExpression';\nimport GroupExpression from './AggregationConditionExpressions/GroupExpression';\n/* eslint-enable import/no-cycle */\n\nimport styles from './AggregationConditionExpression.css';\n\nclass AggregationConditionExpression extends React.Component {\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object,\n formattedFields: PropTypes.array.isRequired,\n aggregationFunctions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n expression: internalNodePropType.isRequired,\n parent: internalNodePropType,\n level: PropTypes.number, // Internal use only\n renderLabel: PropTypes.bool,\n };\n\n static defaultProps = {\n level: 0,\n parent: undefined,\n renderLabel: true,\n validation: {},\n };\n\n state = {\n globalGroupOperator: undefined,\n };\n\n getEffectiveGlobalGroupOperator = () => {\n const { globalGroupOperator } = this.state;\n\n if (globalGroupOperator) {\n return globalGroupOperator;\n }\n\n const { expression } = this.props;\n\n return (expression.expr === '&&' || expression.expr === '||' ? expression.expr : '&&');\n };\n\n getBooleanOperator = (expression, defaultOperator) => {\n if (!expression) {\n return defaultOperator;\n }\n\n const key = expression.expr === 'group' ? 'operator' : 'expr';\n\n return lodash.get(expression, key, defaultOperator) === '&&' ? '&&' : '||';\n };\n\n handleAddExpression = () => {\n const { expression, onChange, parent } = this.props;\n const defaultOperator = this.getEffectiveGlobalGroupOperator();\n const prevOperator = this.getBooleanOperator(parent, defaultOperator);\n const nextExpression = emptyBooleanExpressionConfig({ operator: prevOperator, left: expression });\n\n onChange({ conditions: nextExpression });\n };\n\n handleAddGroup = () => {\n const { expression, onChange, parent } = this.props;\n const defaultOperator = this.getEffectiveGlobalGroupOperator();\n const prevOperator = this.getBooleanOperator(parent, defaultOperator);\n const groupOperator = prevOperator === '&&' ? '||' : '&&';\n const groupExpression = emptyGroupExpressionConfig({ operator: groupOperator });\n const nextExpression = emptyBooleanExpressionConfig({ operator: prevOperator, left: expression, right: groupExpression });\n\n onChange({ conditions: nextExpression });\n };\n\n handleDeleteExpression = () => {\n const { onChange } = this.props;\n\n onChange({ conditions: null });\n };\n\n handleChildChange = (branch) => {\n return (changes) => {\n const { expression, onChange } = this.props;\n\n if (!Object.keys(changes).includes('conditions')) {\n onChange(changes);\n\n return;\n }\n\n const update = changes.conditions;\n let nextUpdate;\n\n // A null update indicates that one of the branches got removed\n if (update === null) {\n if (branch === 'child') {\n // If this is the last branch of a group, remove the group altogether\n nextUpdate = null;\n } else {\n // Otherwise replace the current tree with the still existing branch\n nextUpdate = expression[(branch === 'left' ? 'right' : 'left')];\n }\n } else if (branch === 'child' && update.expr === 'group') {\n // Avoid that a group's child is another group. Groups should at least have one expression\n nextUpdate = update;\n } else {\n // Propagate the update in the expression tree.\n const nextExpression = lodash.cloneDeep(expression);\n\n nextExpression[branch] = update;\n nextUpdate = nextExpression;\n }\n\n onChange({ ...changes, conditions: nextUpdate });\n };\n };\n\n handleOperatorChange = (nextOperator) => {\n const { expression, onChange } = this.props;\n\n this.setState({ globalGroupOperator: nextOperator });\n const nextExpression = replaceBooleanExpressionOperatorInGroup(nextOperator, expression);\n\n onChange({ conditions: nextExpression });\n };\n\n render() {\n const { expression, parent, renderLabel } = this.props;\n let expressionComponent;\n\n switch (expression.expr) {\n case 'number-ref':\n expressionComponent = ;\n break;\n case 'number':\n expressionComponent = ;\n break;\n case 'group':\n expressionComponent = ;\n break;\n case '&&':\n case '||':\n expressionComponent = (\n \n );\n\n break;\n case '<':\n case '<=':\n case '>':\n case '>=':\n case '==':\n default:\n expressionComponent = (\n <>\n \n \n \n
\n \n \n \n \n \n
\n
\n \n \n );\n }\n\n if (!parent && expression.expr !== 'group') {\n return (\n <>\n \n \n {expressionComponent}\n \n );\n }\n\n return expressionComponent;\n }\n}\n\nexport default AggregationConditionExpression;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nconst AggregationConditionSummary = ({ conditions, series }) => {\n const renderExpression = (expression) => {\n if (!expression) {\n return 'No condition configured';\n }\n\n switch (expression.expr) {\n case 'number':\n return expression.value;\n case 'number-ref':\n // eslint-disable-next-line no-case-declarations\n const selectedSeries = series.find((s) => s.id === expression.ref);\n\n return (selectedSeries && selectedSeries.function\n ? {selectedSeries.function}({selectedSeries.field})\n : No series selected);\n case '&&':\n case '||':\n return (\n <>\n {renderExpression(expression.left)}{' '}\n {expression.expr === '&&' ? 'AND' : 'OR'}{' '}\n {renderExpression(expression.right)}\n \n );\n case 'group':\n return [{renderExpression(expression.child)}];\n case '<':\n case '<=':\n case '>':\n case '>=':\n case '==':\n return (\n <>\n {renderExpression(expression.left)}{' '}\n {expression.expr}{' '}\n {renderExpression(expression.right)}\n \n );\n default:\n return 'No condition configured';\n }\n };\n\n return renderExpression(conditions.expression);\n};\n\nAggregationConditionSummary.propTypes = {\n conditions: PropTypes.object.isRequired,\n series: PropTypes.array.isRequired,\n};\n\nexport default AggregationConditionSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport { Button, Panel } from 'components/bootstrap';\nimport { Icon } from 'components/common';\n\nimport AggregationConditionSummary from './AggregationConditionSummary';\n\nconst StyledPanel = styled(Panel)`\n margin-top: 10px;\n`;\n\nconst StyledButton = styled(Button)`\n margin-left: 15px;\n vertical-align: baseline;\n`;\n\nconst AggregationConditionsFormSummary = (props) => {\n const { conditions, series, expressionValidation, showInlineValidation, toggleShowValidation } = props;\n\n return (\n
\n \n {expressionValidation.isValid\n ?

 Condition is valid

\n : (\n

\n  Condition is not valid\n \n {showInlineValidation ? 'Hide errors' : 'Show errors'}\n \n

\n )}\n Preview: \n
\n
\n );\n};\n\nAggregationConditionsFormSummary.propTypes = {\n conditions: PropTypes.object.isRequired,\n series: PropTypes.array.isRequired,\n expressionValidation: PropTypes.object,\n showInlineValidation: PropTypes.bool,\n toggleShowValidation: PropTypes.func.isRequired,\n};\n\nAggregationConditionsFormSummary.defaultProps = {\n expressionValidation: { isValid: true },\n showInlineValidation: false,\n};\n\nexport default AggregationConditionsFormSummary;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { get } from 'lodash';\n\nimport { Alert, Row } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport { emptyComparisonExpressionConfig } from 'logic/alerts/AggregationExpressionConfig';\nimport validateExpression from 'logic/alerts/AggregationExpressionValidation';\n\nimport AggregationConditionExpression from './AggregationConditionExpression';\nimport AggregationConditionsFormSummary from './AggregationConditionsFormSummary';\n\nimport commonStyles from '../common/commonStyles.css';\n\nconst initialEmptyConditionConfig = emptyComparisonExpressionConfig();\n\nconst extractSeriesReferences = (expression, acc = []) => {\n if (expression.expr === 'number-ref') {\n acc.push(expression.ref);\n }\n\n if (expression.left && expression.right) {\n return extractSeriesReferences(expression.left).concat(extractSeriesReferences(expression.right));\n }\n\n if (expression.child) {\n return extractSeriesReferences(expression.child);\n }\n\n return acc;\n};\n\nconst StyledAlert = styled(Alert)`\n margin-bottom: 10px !important;\n`;\n\nclass AggregationConditionsForm extends React.Component {\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n formattedFields: PropTypes.array.isRequired,\n aggregationFunctions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n this.state = {\n showInlineValidation: false,\n };\n }\n\n toggleShowInlineValidation = () => {\n const { showInlineValidation } = this.state;\n\n this.setState({ showInlineValidation: !showInlineValidation });\n };\n\n handleChange = (changes) => {\n const { eventDefinition, onChange } = this.props;\n\n if (!Object.keys(changes).includes('conditions')) {\n onChange(changes);\n\n return;\n }\n\n const nextConditions = changes.conditions;\n\n let nextSeries;\n\n if (nextConditions) {\n // Keep series up-to-date with changes in conditions\n const seriesReferences = extractSeriesReferences(nextConditions);\n\n nextSeries = (changes.series || eventDefinition.config.series).filter((s) => seriesReferences.includes(s.id));\n } else {\n nextSeries = [];\n }\n\n onChange({\n ...changes,\n conditions: { expression: nextConditions },\n series: nextSeries,\n });\n };\n\n render() {\n const { showInlineValidation } = this.state;\n const { eventDefinition, validation } = this.props;\n const expression = eventDefinition.config.conditions.expression || initialEmptyConditionConfig;\n const expressionValidation = validateExpression(expression, eventDefinition.config.series);\n\n return (\n <>\n

Create Events for Definition

\n {validation.errors.conditions && (\n \n

 Errors found

\n

{get(validation, 'errors.conditions[0]')}

\n
\n )}\n\n \n \n \n\n \n \n );\n }\n}\n\nexport default AggregationConditionsForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { MultiSelect } from 'components/common';\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\n// TODO: This should be moved to a general place outside of `views`\nimport { defaultCompare } from 'views/logic/DefaultCompare';\nimport useFieldTypes from 'views/logic/fieldtypes/useFieldTypes';\nimport { ALL_MESSAGES_TIMERANGE } from 'views/Constants';\n\nimport AggregationConditionsForm from './AggregationConditionsForm';\n\nimport commonStyles from '../common/commonStyles.css';\n\ntype EventDefinitionConfig = {\n group_by: Array,\n streams: Array,\n};\n\ntype EventDefinition = {\n config: EventDefinitionConfig,\n};\n\ntype Props = {\n eventDefinition: EventDefinition,\n validation: {},\n aggregationFunctions: Array<{}>,\n onChange: (key: string, newValue: any) => void,\n};\n\nconst AggregationForm = ({ aggregationFunctions, eventDefinition, validation, onChange }: Props) => {\n const { data: allFieldTypes } = useFieldTypes(eventDefinition?.config?.streams ?? [], ALL_MESSAGES_TIMERANGE);\n // Memoize function to only format fields when they change. Use joined fieldNames as cache key.\n const formattedFields = useMemo(() => (allFieldTypes ?? [])\n .sort((ftA, ftB) => defaultCompare(ftA.name, ftB.name))\n .map((fieldType) => ({\n label: `${fieldType.name} – ${fieldType.value.type.type}`,\n value: fieldType.name,\n })), [allFieldTypes]);\n\n const propagateConfigChange = useCallback((update: Partial) => {\n const nextConfig = { ...eventDefinition.config, ...update };\n\n onChange('config', nextConfig);\n }, [eventDefinition.config, onChange]);\n\n const handleGroupByChange = useCallback((selected: string) => {\n const nextValue = selected === '' ? [] : selected.split(',');\n propagateConfigChange({ group_by: nextValue });\n }, [propagateConfigChange]);\n\n return (\n
\n

Aggregation

\n

\n Summarize log messages matching the Filter defined above by using a function. You can optionally group the\n Filter results by identical field values.\n

\n \n \n \n Group by Field(s) (Optional)\n \n \n Select Fields that Graylog should use to group Filter results when they have identical values.\n {' '}Example:
\n Assuming you created a Filter with all failed log-in attempts in your network, Graylog could alert you\n when there are more than 5 failed log-in attempts overall. Now, add username as Group by\n Field and Graylog will alert you for each username with more than 5 failed\n log-in attempts.\n
\n
\n \n
\n\n
\n\n \n
\n );\n};\n\nAggregationForm.propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n aggregationFunctions: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default AggregationForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { Col, ControlLabel, FormGroup, Radio, Row } from 'components/bootstrap';\nimport * as FormsUtils from 'util/FormsUtils';\n\nimport FilterForm from './FilterForm';\nimport FilterPreviewContainer from './FilterPreviewContainer';\nimport AggregationForm from './AggregationForm';\n\nconst conditionTypes = {\n AGGREGATION: 0,\n FILTER: 1,\n};\n\nconst initialFilterConfig = {\n query: '',\n query_parameters: [],\n streams: [],\n search_within_ms: 60 * 1000,\n execute_every_ms: 60 * 1000,\n};\n\nconst initialAggregationConfig = {\n group_by: [],\n series: [],\n conditions: {},\n};\n\nclass FilterAggregationForm extends React.Component {\n static propTypes = {\n eventDefinition: PropTypes.object.isRequired,\n validation: PropTypes.object.isRequired,\n entityTypes: PropTypes.object.isRequired,\n streams: PropTypes.array.isRequired,\n onChange: PropTypes.func.isRequired,\n currentUser: PropTypes.object.isRequired,\n };\n\n static defaultConfig = {\n ...initialFilterConfig,\n ...initialAggregationConfig,\n };\n\n constructor(props) {\n super(props);\n\n const { group_by, series, conditions } = props.eventDefinition.config;\n const expression = lodash.get(conditions, 'expression', {});\n const defaultConditionType = (lodash.isEmpty(group_by) && lodash.isEmpty(series) && lodash.isEmpty(expression)\n ? conditionTypes.FILTER : conditionTypes.AGGREGATION);\n\n this.state = {\n conditionType: defaultConditionType,\n };\n }\n\n propagateChange = (key, value) => {\n const { onChange } = this.props;\n\n onChange(key, value);\n };\n\n handleTypeChange = (event) => {\n const stateChange = {};\n const nextConditionType = Number(FormsUtils.getValueFromInput(event.target));\n\n stateChange[event.target.name] = nextConditionType;\n\n if (nextConditionType === conditionTypes.FILTER) {\n const { eventDefinition } = this.props;\n\n // Store existing data temporarily in state, to restore it in case the type change was accidental\n const existingAggregationConfig = {};\n\n Object.keys(initialAggregationConfig).forEach((key) => {\n existingAggregationConfig[key] = eventDefinition.config[key];\n });\n\n stateChange.existingAggregationConfig = existingAggregationConfig;\n\n const nextConfig = { ...eventDefinition.config, ...initialAggregationConfig };\n\n this.propagateChange('config', nextConfig);\n } else {\n // Reset aggregation data from state if it exists\n const { existingAggregationConfig } = this.state;\n\n if (existingAggregationConfig) {\n const { eventDefinition } = this.props;\n const nextConfig = { ...eventDefinition.config, ...existingAggregationConfig };\n\n this.propagateChange('config', nextConfig);\n stateChange.existingAggregationConfig = undefined;\n }\n }\n\n this.setState(stateChange);\n };\n\n handleChange = (event) => {\n const { name } = event.target;\n\n this.propagateChange(name, FormsUtils.getValueFromInput(event.target));\n };\n\n render() {\n const { conditionType } = this.state;\n const { entityTypes, eventDefinition, streams, validation, currentUser } = this.props;\n\n return (\n <>\n \n \n s.is_editable)}\n currentUser={currentUser}\n onChange={this.propagateChange} />\n\n \n Create Events for Definition if...\n \n Filter has results\n \n \n Aggregation of results reaches a threshold\n \n \n \n \n \n \n \n {conditionType === conditionTypes.AGGREGATION && (\n \n \n \n \n \n )}\n \n );\n }\n}\n\nexport default FilterAggregationForm;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\n\nimport { Spinner } from 'components/common';\nimport { StreamsStore } from 'stores/streams/StreamsStore';\n\nexport default function withStreams(WrappedComponent, hiddenStreams = []) {\n const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n\n class WithStreams extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n streams: undefined,\n };\n }\n\n componentDidMount() {\n StreamsStore.load((streams) => {\n let filteredStreams = streams.filter((s) => s.is_editable);\n\n if (hiddenStreams.length !== 0) {\n filteredStreams = streams.filter((s) => !hiddenStreams.includes(s.id));\n }\n\n this.setState({ streams: filteredStreams });\n });\n }\n\n render() {\n const { streams } = this.state;\n\n if (!streams) {\n return ;\n }\n\n return ;\n }\n }\n\n WithStreams.displayName = `withStreams(${wrappedComponentName})`;\n\n return WithStreams;\n}\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FilterAggregationForm from './FilterAggregationForm';\nimport withStreams from './withStreams';\n\ntype Props = {\n action: 'create' | 'edit',\n validation: {},\n eventDefinition: {},\n fieldTypes: {},\n onChange: () => void,\n currentUser: {\n permissions: Array,\n }\n};\n\nconst FilterAggregationFormContainer = (props: Props) => {\n return ;\n};\n\nFilterAggregationFormContainer.propTypes = {\n action: PropTypes.oneOf(['create', 'edit']).isRequired,\n validation: PropTypes.object.isRequired,\n eventDefinition: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n currentUser: PropTypes.object.isRequired, // Prop is passed down to pluggable entities\n};\n\nexport default withStreams(FilterAggregationFormContainer);\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./FilterAggregationSummary.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./FilterAggregationSummary.css\";\n export default content && content.locals ? content.locals : undefined;\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport lodash from 'lodash';\n\nimport { Link } from 'components/common/router';\nimport { Alert } from 'components/bootstrap';\nimport { Icon } from 'components/common';\nimport { extractDurationAndUnit } from 'components/common/TimeUnitInput';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport { naturalSortIgnoreCase } from 'util/SortUtils';\nimport Routes from 'routing/Routes';\nimport validateExpression from 'logic/alerts/AggregationExpressionValidation';\n\nimport AggregationConditionSummary from './AggregationConditionSummary';\nimport withStreams from './withStreams';\nimport { TIME_UNITS } from './FilterForm';\nimport styles from './FilterAggregationSummary.css';\n\nclass FilterAggregationSummary extends React.Component {\n static propTypes = {\n config: PropTypes.object.isRequired,\n currentUser: PropTypes.object.isRequired,\n streams: PropTypes.array.isRequired,\n };\n\n getConditionType = (config) => {\n const { group_by: groupBy, series, conditions } = config;\n\n return (lodash.isEmpty(groupBy)\n && (!conditions || lodash.isEmpty(conditions) || conditions.expression === null)\n && lodash.isEmpty(series)\n ? 'filter' : 'aggregation');\n };\n\n formatStreamOrId = (streamOrId) => {\n if (typeof streamOrId === 'string') {\n return {streamOrId};\n }\n\n return (\n \n {streamOrId.title}\n \n );\n };\n\n renderStreams = (streamIds, streamIdsWithMissingPermission) => {\n const { streams } = this.props;\n\n if ((!streamIds || streamIds.length === 0) && streamIdsWithMissingPermission.length <= 0) {\n return 'No Streams selected, searches in all Streams';\n }\n\n const warning = streamIdsWithMissingPermission.length > 0\n ? Missing Stream Permissions for:
{streamIdsWithMissingPermission.join(', ')}
\n : null;\n\n const renderedStreams = streamIds\n .map((id) => streams.find((s) => s.id === id) || id)\n .sort((s1, s2) => naturalSortIgnoreCase(s1.title || s1, s2.title || s2))\n .map(this.formatStreamOrId);\n\n return (\n <>\n {warning}\n {renderedStreams}\n \n );\n };\n\n renderQueryParameters = (queryParameters) => {\n if (queryParameters.some((p) => p.embryonic)) {\n const undeclaredParameters = queryParameters.filter((p) => p.embryonic)\n .map((p) => p.name)\n .join(', ');\n\n return (\n \n  There are undeclared query parameters: {undeclaredParameters}\n \n );\n }\n\n return
{queryParameters.map((p) => p.name).join(', ')}
;\n };\n\n render() {\n const { config, currentUser } = this.props;\n const {\n query,\n query_parameters: queryParameters,\n streams,\n search_within_ms: searchWithinMs,\n execute_every_ms: executeEveryMs,\n _is_scheduled: isScheduled,\n group_by: groupBy,\n series,\n conditions,\n } = config;\n\n const conditionType = this.getConditionType(config);\n\n const searchWithin = extractDurationAndUnit(searchWithinMs, TIME_UNITS);\n const executeEvery = extractDurationAndUnit(executeEveryMs, TIME_UNITS);\n\n const effectiveStreamIds = streams.filter((s) => isPermitted(currentUser.permissions, `streams:read:${s}`));\n const streamIdsWithMissingPermission = streams.filter((s) => !effectiveStreamIds.includes(s));\n\n const validationResults = validateExpression(conditions.expression, series);\n\n return (\n
\n
Type
\n
{lodash.upperFirst(conditionType)}
\n
Search Query
\n
{query || '*'}
\n {queryParameters.length > 0 && this.renderQueryParameters(queryParameters)}\n
Streams
\n
{this.renderStreams(effectiveStreamIds, streamIdsWithMissingPermission)}
\n
Search within
\n
{searchWithin.duration} {searchWithin.unit.toLowerCase()}
\n
Execute search every
\n
{executeEvery.duration} {executeEvery.unit.toLowerCase()}
\n
Enable scheduling
\n
{isScheduled ? 'yes' : 'no'}
\n {conditionType === 'aggregation' && (\n <>\n
Group by Field(s)
\n
{groupBy && groupBy.length > 0 ? groupBy.join(', ') : 'No Group by configured'}
\n
Create Events if
\n
\n {validationResults.isValid\n ? \n : (\n  \n Condition is not valid: {validationResults.errors.join(', ')}\n \n )}\n
\n \n )}\n
\n );\n }\n}\n\nexport default withStreams(FilterAggregationSummary);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport { PluginManifest, PluginStore } from 'graylog-web-plugin/plugin';\n\nimport FilterAggregationFormContainer from './FilterAggregationFormContainer';\nimport FilterAggregationForm from './FilterAggregationForm';\nimport FilterAggregationSummary from './FilterAggregationSummary';\n\nPluginStore.register(new PluginManifest({}, {\n eventDefinitionTypes: [\n {\n type: 'aggregation-v1',\n displayName: 'Filter & Aggregation',\n sortOrder: 0, // Sort before conditions working on events\n description: 'Create Events from log messages by filtering them and (optionally) '\n + 'aggregating their results to match a given condition. These Events can be used as input for a Correlation Rule.',\n formComponent: FilterAggregationFormContainer,\n summaryComponent: FilterAggregationSummary,\n defaultConfig: FilterAggregationForm.defaultConfig,\n },\n ],\n}));\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\nimport URI from 'urijs';\nimport lodash from 'lodash';\n\nimport * as URLUtils from 'util/URLUtils';\nimport UserNotification from 'util/UserNotification';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\n\nexport const EventDefinitionsActions = singletonActions(\n 'core.EventDefinitions',\n () => Reflux.createActions({\n listAll: { asyncResult: true },\n listPaginated: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n update: { asyncResult: true },\n delete: { asyncResult: true },\n enable: { asyncResult: true },\n disable: { asyncResult: true },\n clearNotificationQueue: { asyncResult: true },\n }),\n);\n\nexport const EventDefinitionsStore = singletonStore(\n 'core.EventDefinitions',\n () => Reflux.createStore({\n listenables: [EventDefinitionsActions],\n sourceUrl: '/events/definitions',\n all: undefined,\n eventDefinitions: undefined,\n context: undefined,\n query: undefined,\n pagination: {\n count: undefined,\n page: undefined,\n pageSize: undefined,\n total: undefined,\n grandTotal: undefined,\n },\n\n getInitialState() {\n return this.getState();\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n getState() {\n return {\n all: this.all,\n eventDefinitions: this.eventDefinitions,\n context: this.context,\n query: this.query,\n pagination: this.pagination,\n };\n },\n\n eventDefinitionsUrl({ segments = [], query = {} }) {\n const uri = new URI(this.sourceUrl);\n const nextSegments = lodash.concat(uri.segment(), segments);\n\n uri.segmentCoded(nextSegments);\n uri.query(query);\n\n return URLUtils.qualifyUrl(uri.resource());\n },\n\n refresh() {\n if (this.all) {\n this.listAll();\n }\n\n if (this.pagination.page) {\n this.listPaginated({\n query: this.query,\n page: this.pagination.page,\n pageSize: this.pagination.pageSize,\n });\n }\n },\n\n listAll() {\n const promise = fetch('GET', this.eventDefinitionsUrl({ query: { per_page: 0 } }));\n\n promise.then((response) => {\n this.all = response.event_definitions;\n this.context = response.context;\n this.propagateChanges();\n\n return response;\n });\n\n EventDefinitionsActions.listAll.promise(promise);\n },\n\n listPaginated({ query = '', page = 1, pageSize = 10 }) {\n const promise = fetch('GET', this.eventDefinitionsUrl({\n query: {\n query: query,\n page: page,\n per_page: pageSize,\n },\n }));\n\n promise.then((response) => {\n this.eventDefinitions = response.event_definitions;\n this.context = response.context;\n this.query = response.query;\n\n this.pagination = {\n count: response.count,\n page: response.page,\n pageSize: response.per_page,\n total: response.total,\n grandTotal: response.grand_total,\n };\n\n this.propagateChanges();\n\n return response;\n }).catch((error) => {\n UserNotification.error(`Fetching event definitions failed with status: ${error}`,\n 'Could not retrieve event definitions');\n });\n\n EventDefinitionsActions.listPaginated.promise(promise);\n },\n\n get(eventDefinitionId) {\n const promise = fetch('GET', this.eventDefinitionsUrl({ segments: [eventDefinitionId, 'with-context'] }));\n\n promise.catch((error) => {\n if (error.status === 404) {\n UserNotification.error(`Unable to find Event Definition with id <${eventDefinitionId}>, please ensure it wasn't deleted.`,\n 'Could not retrieve Event Definition');\n }\n });\n\n EventDefinitionsActions.get.promise(promise);\n },\n\n setAlertFlag(eventDefinition) {\n const isAlert = eventDefinition.notifications.length > 0;\n\n return { ...eventDefinition, alert: isAlert };\n },\n\n extractSchedulerInfo(eventDefinition) {\n // Removes the internal \"_is_scheduled\" field from the event definition data. We only use this to pass-through\n // the flag from the form.\n const clonedEventDefinition = lodash.cloneDeep(eventDefinition);\n const { _is_scheduled } = lodash.pick(clonedEventDefinition.config, ['_is_scheduled']);\n\n clonedEventDefinition.config = lodash.omit(clonedEventDefinition.config, ['_is_scheduled']);\n\n return { eventDefinition: clonedEventDefinition, isScheduled: lodash.defaultTo(_is_scheduled, true) };\n },\n\n create(newEventDefinition) {\n const { eventDefinition, isScheduled } = this.extractSchedulerInfo(newEventDefinition);\n const promise = fetch('POST', this.eventDefinitionsUrl({ query: { schedule: isScheduled } }), this.setAlertFlag(eventDefinition));\n\n promise.then(\n (response) => {\n UserNotification.success('Event Definition created successfully',\n `Event Definition \"${eventDefinition.title}\" was created successfully.`);\n\n this.refresh();\n\n return response;\n },\n (error) => {\n if (error.status !== 400 || !error.additional.body || !error.additional.body.failed) {\n UserNotification.error(`Creating Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not save Event Definition');\n }\n },\n );\n\n EventDefinitionsActions.create.promise(promise);\n },\n\n update(eventDefinitionId, updatedEventDefinition) {\n const { eventDefinition, isScheduled } = this.extractSchedulerInfo(updatedEventDefinition);\n const promise = fetch('PUT', this.eventDefinitionsUrl({ segments: [eventDefinitionId], query: { schedule: isScheduled } }), this.setAlertFlag(eventDefinition));\n\n promise.then(\n (response) => {\n UserNotification.success('Event Definition updated successfully',\n `Event Definition \"${eventDefinition.title}\" was updated successfully.`);\n\n this.refresh();\n\n return response;\n },\n (error) => {\n if (error.status !== 400 || !error.additional.body || !error.additional.body.failed) {\n UserNotification.error(`Updating Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not update Event Definition');\n }\n },\n );\n\n EventDefinitionsActions.update.promise(promise);\n },\n\n delete(eventDefinition) {\n const promise = fetch('DELETE', this.eventDefinitionsUrl({ segments: [eventDefinition.id] }));\n\n promise.then(\n () => {\n UserNotification.success('Event Definition deleted successfully',\n `Event Definition \"${eventDefinition.title}\" was deleted successfully.`);\n\n this.refresh();\n },\n (error) => {\n UserNotification.error(`Deleting Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not delete Event Definition');\n },\n );\n\n EventDefinitionsActions.delete.promise(promise);\n },\n\n enable(eventDefinition) {\n const promise = fetch('PUT', this.eventDefinitionsUrl({ segments: [eventDefinition.id, 'schedule'] }));\n\n promise.then(\n (response) => {\n UserNotification.success('Event Definition successfully enabled',\n `Event Definition \"${eventDefinition.title}\" was successfully enabled.`);\n\n this.refresh();\n\n return response;\n },\n (error) => {\n if (error.status !== 400 || !error.additional.body || !error.additional.body.failed) {\n UserNotification.error(`Enabling Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not enable Event Definition');\n }\n },\n );\n\n EventDefinitionsActions.enable.promise(promise);\n },\n\n disable(eventDefinition) {\n const promise = fetch('PUT', this.eventDefinitionsUrl({ segments: [eventDefinition.id, 'unschedule'] }));\n\n promise.then(\n (response) => {\n UserNotification.success('Event Definition successfully disabled',\n `Event Definition \"${eventDefinition.title}\" was successfully disabled.`);\n\n this.refresh();\n\n return response;\n },\n (error) => {\n if (error.status !== 400 || !error.additional.body || !error.additional.body.failed) {\n UserNotification.error(`Disabling Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not disable Event Definition');\n }\n },\n );\n\n EventDefinitionsActions.disable.promise(promise);\n },\n\n clearNotificationQueue(eventDefinition) {\n const promise = fetch('PUT', this.eventDefinitionsUrl({ segments: [eventDefinition.id, 'clear-notification-queue'] }));\n\n promise.then(\n (response) => {\n UserNotification.success('Queued notifications cleared.',\n 'Queued notifications were successfully cleared.');\n\n this.refresh();\n\n return response;\n },\n (error) => {\n if (error.status !== 400 || !error.additional.body || !error.additional.body.failed) {\n UserNotification.error(`Clearing queued notifications failed with status: ${error}`,\n 'Could not clear queued notifications');\n }\n },\n );\n\n EventDefinitionsActions.clearNotificationQueue.promise(promise);\n },\n }),\n);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport Reflux from 'reflux';\n\nimport UserNotification from 'util/UserNotification';\nimport PaginationURL from 'util/PaginationURL';\nimport { qualifyUrl } from 'util/URLUtils';\nimport fetch from 'logic/rest/FetchProvider';\nimport { singletonStore, singletonActions } from 'logic/singleton';\nimport type { LookupTable, LookupTableAdapter, LookupTableCache } from 'logic/lookup-tables/types';\nimport type { PaginatedResponseType } from 'stores/PaginationTypes';\n\ntype LookupResult = {\n multi_value: string | number | object | boolean | null,\n single_value: string | number | object | boolean | null,\n string_list_value: Array | null,\n ttl: number,\n has_error: boolean,\n}\n\ntype ValidationErrors = {\n error_context: {\n [fieldName: string]: Array | undefined,\n },\n failed: boolean,\n errors: {\n [fieldName: string]: Array | undefined,\n },\n}\n\ntype ErrorState = {\n tables: {\n [tableId: string]: string | undefined,\n },\n caches: {\n [cacheId: string]: string | undefined,\n },\n dataAdapters: {\n [adapterId: string]: string | undefined,\n }\n}\n\ntype LookupTablesStoreState = {\n pagination: PaginatedResponseType,\n errorState: ErrorState,\n table: LookupTable | null,\n cache: LookupTableCache | null,\n dataAdapter: LookupTableAdapter | null,\n tables: {\n [tableId: string]: LookupTable | undefined,\n },\n caches: {\n [cacheId: string]: LookupTableCache | undefined,\n },\n dataAdapters: {\n [adapterId: string]: LookupTableAdapter | undefined,\n },\n lookupResult: LookupResult | null,\n validationErrors: ValidationErrors,\n}\n\ntype LookupTableActionsType = {\n searchPaginated: (page: number, perPage: number, query: string, resolve: boolean) => Promise,\n reloadPage: () => Promise,\n get: (idOrName: string) => Promise,\n create: (table: LookupTable) => Promise,\n delete: (idOrName: string) => Promise,\n update: (table: LookupTable) => Promise,\n getErrors: (tableNames: Array | undefined, cacheNames: Array | undefined, dataAdapterNames: Array | undefined) => Promise,\n lookup: (tableName: string, key: string) => Promise,\n purgeKey: (table: LookupTable, key: string) => Promise,\n purgeAll: (table: LookupTable, key: string) => Promise,\n validate: (table: LookupTable) => Promise,\n}\n\nexport const LookupTablesActions = singletonActions(\n 'core.LookupTables',\n () => Reflux.createActions({\n searchPaginated: { asyncResult: true },\n reloadPage: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n delete: { asyncResult: true },\n update: { asyncResult: true },\n getErrors: { asyncResult: true },\n lookup: { asyncResult: true },\n purgeKey: { asyncResult: true },\n purgeAll: { asyncResult: true },\n validate: { asyncResult: true },\n }),\n);\n\nexport const LookupTablesStore = singletonStore(\n 'core.LookupTables',\n () => Reflux.createStore({\n listenables: [LookupTablesActions],\n pagination: {\n page: 1,\n per_page: 10,\n total: 0,\n count: 0,\n query: null,\n },\n errorStates: {\n tables: {},\n caches: {},\n dataAdapters: {},\n },\n table: null,\n cache: null,\n dataAdapter: null,\n tables: null,\n caches: null,\n dataAdapters: null,\n lookupResult: null,\n validationErrors: {},\n\n getInitialState() {\n return this.getState();\n },\n\n getState() {\n return {\n errorStates: this.errorStates,\n table: this.table,\n cache: this.cache,\n dataAdapter: this.dataAdapter,\n tables: this.tables,\n caches: this.caches,\n dataAdapters: this.dataAdapters,\n lookupResult: this.lookupResult,\n validationErrors: this.validationErrors,\n pagination: this.pagination,\n };\n },\n\n propagateChanges() {\n this.trigger(this.getState());\n },\n\n reloadPage() {\n const promise = this.searchPaginated(this.pagination.page, this.pagination.per_page, this.pagination.query);\n\n LookupTablesActions.reloadPage.promise(promise);\n\n return promise;\n },\n\n searchPaginated(page: number, perPage: number, query: string, resolve: boolean = true) {\n const url = this._url(PaginationURL('tables', page, perPage, query, { resolve }));\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n this.pagination = {\n count: response.count,\n total: response.total,\n page: response.page,\n per_page: response.per_page,\n query: response.query,\n };\n\n this.tables = response.lookup_tables;\n this.caches = response.caches;\n this.dataAdapters = response.data_adapters;\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup tables failed', 'Could not retrieve the lookup tables'));\n\n LookupTablesActions.searchPaginated.promise(promise);\n\n return promise;\n },\n\n get(idOrName: string) {\n const url = this._url(`tables/${idOrName}?resolve=true`);\n const promise = fetch('GET', url);\n\n promise.then((response) => {\n // do not propagate pagination! it will destroy the subsequent overview page's state.\n const lookupTable = response.lookup_tables[0];\n\n this.table = lookupTable;\n this.cache = response.caches[lookupTable.cache_id];\n this.dataAdapter = response.data_adapters[lookupTable.data_adapter_id];\n this.propagateChanges();\n }, this._errorHandler(`Fetching lookup table ${idOrName} failed`,\n 'Could not retrieve lookup table'));\n\n LookupTablesActions.get.promise(promise);\n\n return promise;\n },\n\n create(table: LookupTable) {\n const url = this._url('tables');\n const promise = fetch('POST', url, table);\n\n promise.catch(this._errorHandler('Creating lookup table failed', `Could not create lookup table \"${table.name}\"`));\n\n LookupTablesActions.create.promise(promise);\n\n return promise;\n },\n\n update(table: LookupTable) {\n const url = this._url(`tables/${table.id}`);\n const promise = fetch('PUT', url, table);\n\n promise.catch(this._errorHandler('Updating lookup table failed', `Could not update lookup table \"${table.name}\"`));\n\n LookupTablesActions.update.promise(promise);\n\n return promise;\n },\n\n delete(idOrName: string) {\n const url = this._url(`tables/${idOrName}`);\n const promise = fetch('DELETE', url);\n\n promise.catch(this._errorHandler('Deleting lookup table failed', `Could not delete lookup table \"${idOrName}\"`));\n\n LookupTablesActions.delete.promise(promise);\n\n return promise;\n },\n\n getErrors(tableNames: Array | undefined, cacheNames: Array | undefined, dataAdapterNames: Array | undefined) {\n const request: {\n tables?: Array;\n caches?: Array;\n data_adapters?: Array;\n } = {};\n\n if (tableNames) {\n request.tables = tableNames;\n }\n\n if (cacheNames) {\n request.caches = cacheNames;\n }\n\n if (dataAdapterNames) {\n request.data_adapters = dataAdapterNames;\n }\n\n const promise = fetch('POST', this._url('errorstates'), request);\n\n promise.then((response) => {\n this.errorStates = {\n tables: response.tables || {},\n caches: response.caches || {},\n dataAdapters: response.data_adapters || {},\n };\n\n this.propagateChanges();\n }, this._errorHandler('Fetching lookup table error state failed.', 'Could not error states'));\n\n LookupTablesActions.getErrors.promise(promise);\n\n return promise;\n },\n\n lookup(tableName: string, key: string) {\n const promise = fetch('GET', this._url(`tables/${tableName}/query?key=${encodeURIComponent(key)}`));\n\n promise.then((response) => {\n this.lookupResult = response;\n this.propagateChanges();\n }, this._errorHandler('Lookup failed', `Could not lookup value for key \"${key}\" in lookup table \"${tableName}\"`));\n\n LookupTablesActions.lookup.promise(promise);\n\n return promise;\n },\n\n purgeKey(table: LookupTable, key: string) {\n const promise = fetch('POST', this._urlClusterWise(`tables/${table.id}/purge?key=${encodeURIComponent(key)}`));\n\n promise.then(() => {\n UserNotification.success(`Purging cache key \"${key}\" for lookup table \"${table.name}\"`, 'Success!');\n }, this._errorHandler(`Could not purge cache for key \"${key}\" in lookup table \"${table.name}\"`, 'Failed!'));\n\n LookupTablesActions.purgeKey.promise(promise);\n\n return promise;\n },\n\n purgeAll(table: LookupTable) {\n const promise = fetch('POST', this._urlClusterWise(`tables/${table.id}/purge`));\n\n promise.then(() => {\n UserNotification.success(`Purging cache for lookup table \"${table.name}\"`, 'Success!');\n }, this._errorHandler(`Could not purge cache for lookup table \"${table.name}\"`, 'Failed!'));\n\n LookupTablesActions.purgeAll.promise(promise);\n\n return promise;\n },\n\n validate(table: LookupTable) {\n const url = this._url('tables/validate');\n const promise = fetch('POST', url, table);\n\n promise.then((response) => {\n this.validationErrors = response.errors;\n this.propagateChanges();\n }, this._errorHandler('Lookup table validation failed', `Could not validate lookup table \"${table.name}\"`));\n\n LookupTablesActions.validate.promise(promise);\n\n return promise;\n },\n\n _errorHandler(message: string, title: string, cb: (error: Error) => void | undefined) {\n return (error) => {\n try {\n // Do not show the user notification if the error is a hibernate error message. We cannot display those\n // properly yet...\n if (error.additional.body[0].message_template) {\n return;\n }\n } catch (e) {\n // ignored\n }\n\n let errorMessage;\n\n try {\n errorMessage = error.additional.body.message;\n } catch (e) {\n errorMessage = error.message;\n }\n\n UserNotification.error(`${message}: ${errorMessage}`, title);\n\n if (cb) {\n cb(error);\n }\n };\n },\n\n _url(path: string) {\n return qualifyUrl(`/system/lookup/${path}`);\n },\n\n _urlClusterWise(path: string) {\n return qualifyUrl(`/cluster/system/lookup/${path}`);\n },\n }),\n);\n","/*\n * Copyright (C) 2020 Graylog, Inc.\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the Server Side Public License, version 1,\n * as published by MongoDB, Inc.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * Server Side Public License for more details.\n *\n * You should have received a copy of the Server Side Public License\n * along with this program. If not, see\n * .\n */\nimport moment from 'moment';\nimport naturalSort from 'javascript-natural-sort';\n\n// sortOrder: \"asc\"|\"desc\"\nexport function sortByDate(d1, d2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n const d1Time = moment(d1);\n const d2Time = moment(d2);\n\n if (effectiveSortOrder === 'asc') {\n return (d1Time.isBefore(d2Time) ? -1 : d2Time.isBefore(d1Time) ? 1 : 0);\n }\n\n return (d2Time.isBefore(d1Time) ? -1 : d1Time.isBefore(d2Time) ? 1 : 0);\n}\n\nexport function naturalSortIgnoreCase(s1, s2, sortOrder) {\n const effectiveSortOrder = sortOrder || 'asc';\n\n return (effectiveSortOrder === 'asc' ? naturalSort(s1.toLowerCase(), s2.toLowerCase()) : naturalSort(s2.toLowerCase(), s1.toLowerCase()));\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".z6LAsSk67C9Z9TP6Sw_Z .panel-title {\\n font-size: 1rem; /* theme.fonts.size.body */\\n}\\n\\n.z6LAsSk67C9Z9TP6Sw_Z .panel-title > a {\\n cursor: pointer;\\n display: block;\\n}\\n\\n.z6LAsSk67C9Z9TP6Sw_Z .panel-body {\\n padding: 10px;\\n}\\n\\n.z6LAsSk67C9Z9TP6Sw_Z ul {\\n padding-left: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/common/HelpPanel.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,eAAe,EAAE,0BAA0B;AAC/C;;AAEA;IACI,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,eAAe;AACnB\",\"sourcesContent\":[\":local(.helpPanel) .panel-title {\\n font-size: 1rem; /* theme.fonts.size.body */\\n}\\n\\n:local(.helpPanel) .panel-title > a {\\n cursor: pointer;\\n display: block;\\n}\\n\\n:local(.helpPanel) .panel-body {\\n padding: 10px;\\n}\\n\\n:local(.helpPanel) ul {\\n padding-left: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"helpPanel\": \"z6LAsSk67C9Z9TP6Sw_Z\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".Q3IGkFIUvJ2Wg6SvuD4K {\\n margin-top: 10px;\\n margin-bottom: 10px;\\n}\\n\\n.IsgkvOxhQSEsv8gRjrL3 {\\n table-layout: fixed;\\n}\\n\\n.A9wyo101mpbrg9i57cBz.alert {\\n margin-bottom: 10px;\\n}\\n\\n.A9wyo101mpbrg9i57cBz h4 {\\n font-size: 1.44rem; /* theme.fonts.size.body h4 */\\n margin-bottom: 0.5em;\\n}\\n\\n.A9wyo101mpbrg9i57cBz ul {\\n list-style: disc;\\n margin: 0.5em 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/common/commonStyles.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;IAChB,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,mBAAmB;AACvB;;AAEA;IACI,kBAAkB,EAAE,6BAA6B;IACjD,oBAAoB;AACxB;;AAEA;IACI,gBAAgB;IAChB,eAAe;AACnB\",\"sourcesContent\":[\":local(.title) {\\n margin-top: 10px;\\n margin-bottom: 10px;\\n}\\n\\n:local(.fixedTable) {\\n table-layout: fixed;\\n}\\n\\n:local(.validationSummary).alert {\\n margin-bottom: 10px;\\n}\\n\\n:local(.validationSummary) h4 {\\n font-size: 1.44rem; /* theme.fonts.size.body h4 */\\n margin-bottom: 0.5em;\\n}\\n\\n:local(.validationSummary) ul {\\n list-style: disc;\\n margin: 0.5em 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"title\": \"Q3IGkFIUvJ2Wg6SvuD4K\",\n\t\"fixedTable\": \"IsgkvOxhQSEsv8gRjrL3\",\n\t\"validationSummary\": \"A9wyo101mpbrg9i57cBz\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".Rm5RJaCv9xhyX2lY9jI3 {\\n margin-top: 25px;\\n height: 34px;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-types/AggregationConditionExpression.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,gBAAgB;IAChB,YAAY;AAChB\",\"sourcesContent\":[\":local(.formControlNoLabel) {\\n margin-top: 25px;\\n height: 34px;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"formControlNoLabel\": \"Rm5RJaCv9xhyX2lY9jI3\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".wp9nUw71uYu2kck_XycC span:not(:last-child)::after {\\n content: ', ';\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-types/FilterAggregationSummary.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,aAAa;AACjB\",\"sourcesContent\":[\":local(.streamList) span:not(:last-child)::after {\\n content: ', ';\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"streamList\": \"wp9nUw71uYu2kck_XycC\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".YV9VLhWAF0dOTkZvWqvg .panel-body {\\n max-height: 400px;\\n overflow-y: auto;\\n padding: 20px 10px;\\n}\\n\\n.YV9VLhWAF0dOTkZvWqvg table {\\n table-layout: fixed;\\n word-wrap: break-word;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/components/event-definitions/event-definition-types/FilterPreview.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,mBAAmB;IACnB,qBAAqB;AACzB\",\"sourcesContent\":[\":local(.filterPreview) .panel-body {\\n max-height: 400px;\\n overflow-y: auto;\\n padding: 20px 10px;\\n}\\n\\n:local(.filterPreview) table {\\n table-layout: fixed;\\n word-wrap: break-word;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"filterPreview\": \"YV9VLhWAF0dOTkZvWqvg\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./commonStyles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[6].use[1]!./commonStyles.css\";\n export default content && content.locals ? content.locals : undefined;\n"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","IconHeader","styled","Icon","ConditionalCollapse","condition","wrapper","children","HelpPanel","bsStyle","className","collapsible","header","title","defaultExpanded","defaultHeader","name","styles","toggle","wrapChild","propTypes","PropTypes","defaultProps","StyledInlineCode","LookupTableParameterEdit","validationState","onChange","lookupTables","identifier","parameter","defaultExpandHelp","lookupTable","tableKey","key","defaultValue","parameterSyntax","_handleChange","fieldName","value","_handleInputChange","attributeName","target","Spinner","text","lookupTableOptions","sort","lt1","lt2","naturalSortIgnoreCase","map","table","label","id","error","help","Select","placeholder","inputProps","autoFocus","clearable","required","type","spellCheck","EditQueryParameterModal","props","React","modal","open","queryParameter","state","_validate","propagateChanges","close","setState","queryParameters","prevQueryParameter","newQueryParameters","index","findIndex","p","Error","toJSON","nextQueryParameter","toBuilder","build","newValidation","validation","lodash","this","embryonic","bsSize","onClick","openModal","ref","onSubmitForm","_saved","onModalClose","_cleanState","submitButtonText","handleParameterChange","TIME_UNITS","LOOKUP_PERMISSIONS","FilterForm","streamIds","streams","streamId","find","s","streamOrId","stream","s1","s2","join","queryString","_userCanViewLookupTables","queryId","searchTypeId","query","Query","query_string","timerange","range","searchTypes","limit","offset","search","Search","queries","SearchMetadataActions","then","res","_syncParamsWithQuery","undeclared","eventDefinition","config","paramsInQuery","query_parameters","keptParameters","staleParameters","forEach","has","push","queryParameterStash","newParameters","np","_buildNewParameter","concat","currentUser","isPermitted","permissions","data_type","event","_parseQuery","handleConfigChange","propagateChange","FormsUtils","nextValue","nextUnit","durationInMs","moment","asMilliseconds","stateFieldName","onChangeQueryParameters","newConfig","parameterButtons","queryParam","LookupTableParameter","tables","hasEmbryonicParameters","filter","param","errors","executeEveryMs","execute_every_ms","searchWithinMs","search_within_ms","searchWithin","extractDurationAndUnit","executeEvery","searchWithinMsDuration","duration","searchWithinMsUnit","unit","executeEveryMsDuration","executeEveryMsUnit","uuid","LookupTablesActions","allStreamIds","formattedStreams","formatStreamIds","commonStyles","handleQueryChange","renderQueryParameters","controlId","matchProp","selected","handleStreamsChange","split","update","handleTimeRangeChange","units","checked","_is_scheduled","connect","LookupTablesStore","FilterPreviewActions","singletonActions","Reflux","create","asyncResult","execute","FilterPreviewStore","singletonStore","listenables","sourceUrl","searchJob","result","getInitialState","getState","trigger","resourceUrl","segments","uri","URI","nextSegments","segment","segmentCoded","URLUtils","resource","searchRequest","newSearch","newId","promise","fetch","JSON","stringify","response","trackJobStatus","job","Bluebird","resolve","execution","done","SearchResult","jobStatus","run","executionState","jobId","trackJob","executePromise","cancel","UserNotification","FilterPreview","messages","message","_id","timestamp","searchResult","length","striped","condensed","bordered","renderMessages","isFetchingData","displayPreview","renderedResults","renderSearchResult","description","FilterPreviewContainer","isPermittedToSeePreview","filters","parameters","some","PermissionsMixin","fetchSearch","prevProps","prevQuery","prevQueryParameters","prevStreams","prevSearchWithin","filterPreview","isLoading","forId","CurrentUserStore","emptyBooleanExpressionConfig","operator","left","expr","right","emptyGroupExpressionConfig","child","replaceBooleanExpressionOperatorInGroup","nextOperator","expression","nextExpression","flattenValidationTree","validationTree","union","validateExpressionTree","series","Number","isFinite","selectedSeries","validationResults","isValid","internalNodePropType","numberExpressionNodePropType","numberRefNodePropType","NumberExpression","renderLabel","md","conditions","isRequired","NumberRefExpression","functions","aggregationFunctions","formattedFields","getSeries","seriesId","getOrCreateSeries","handleFieldChange","currentSeries","func","field","nextFunction","nextField","nextSeries","nextSeriesId","seriesIndex","naturalSort","fn","toLowerCase","ignoreAccents","allowCreate","OperatorSelector","theme","css","fonts","size","body","BooleanOperatorSelect","isFirstElement","BooleanOperatorSelector","initialText","onOperatorChange","BooleanExpression","level","onChildChange","parent","ComparisonExpression","Group","GroupExpression","cloneDeep","AggregationConditionExpression","globalGroupOperator","defaultOperator","getEffectiveGlobalGroupOperator","prevOperator","getBooleanOperator","groupExpression","branch","changes","Object","keys","includes","nextUpdate","expressionComponent","handleChildChange","handleDeleteExpression","fixedWidth","handleAddExpression","handleAddGroup","handleOperatorChange","AggregationConditionSummary","renderExpression","StyledPanel","Panel","StyledButton","Button","AggregationConditionsFormSummary","expressionValidation","showInlineValidation","toggleShowValidation","initialEmptyConditionConfig","extractSeriesReferences","acc","StyledAlert","Alert","AggregationConditionsForm","nextConditions","seriesReferences","validateExpression","get","handleChange","toggleShowInlineValidation","AggregationForm","allFieldTypes","useFieldTypes","ALL_MESSAGES_TIMERANGE","data","useMemo","ftA","ftB","defaultCompare","fieldType","propagateConfigChange","useCallback","nextConfig","handleGroupByChange","group_by","lg","conditionTypes","initialAggregationConfig","FilterAggregationForm","stateChange","nextConditionType","existingAggregationConfig","defaultConditionType","conditionType","entityTypes","is_editable","handleTypeChange","lgOffset","aggregation_functions","withStreams","WrappedComponent","hiddenStreams","wrappedComponentName","displayName","WithStreams","StreamsStore","filteredStreams","FilterAggregationFormContainer","action","FilterAggregationSummary","groupBy","to","Routes","streamIdsWithMissingPermission","warning","renderedStreams","formatStreamOrId","undeclaredParameters","isScheduled","getConditionType","effectiveStreamIds","renderStreams","PluginStore","PluginManifest","eventDefinitionTypes","sortOrder","formComponent","summaryComponent","defaultConfig","EventDefinitionsActions","listAll","listPaginated","delete","enable","disable","clearNotificationQueue","EventDefinitionsStore","all","eventDefinitions","context","pagination","count","page","pageSize","total","grandTotal","eventDefinitionsUrl","refresh","per_page","event_definitions","grand_total","eventDefinitionId","status","setAlertFlag","isAlert","notifications","alert","extractSchedulerInfo","clonedEventDefinition","newEventDefinition","schedule","additional","failed","updatedEventDefinition","searchPaginated","reloadPage","getErrors","lookup","purgeKey","purgeAll","validate","errorStates","caches","dataAdapters","cache","dataAdapter","lookupResult","validationErrors","perPage","url","_url","PaginationURL","lookup_tables","data_adapters","_errorHandler","idOrName","cache_id","data_adapter_id","tableNames","cacheNames","dataAdapterNames","request","tableName","encodeURIComponent","_urlClusterWise","cb","message_template","e","errorMessage","path","qualifyUrl","sortByDate","d1","d2","effectiveSortOrder","d1Time","d2Time","isBefore","___CSS_LOADER_EXPORT___","module","locals"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy