Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
{"version":3,"file":"1255d548-8905.ec28249651141b909d18.js","mappings":"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","sources":["webpack://graylog-web-interface/./src/components/event-definitions/common/HelpPanel.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/HelpPanel.css?8b4d","webpack://graylog-web-interface/./src/components/event-definitions/common/HelpPanel.jsx","webpack://graylog-web-interface/./src/stores/event-definitions/FilterPreviewStore.js","webpack://graylog-web-interface/./src/components/event-definitions/event-definition-types/FilterPreview.css?436c","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?a300","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?9f49","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/components/event-definitions/replay-search/LinkToReplaySearch.tsx","webpack://graylog-web-interface/./src/stores/event-definitions/EventDefinitionsStore.js"],"sourcesContent":["// 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, `.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[4].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[4].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 Reflux from 'reflux';\nimport URI from 'urijs';\nimport concat from 'lodash/concat';\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\nconst delay = (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\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 = 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 Promise((resolve) => {\n if (job && job.execution.done) {\n resolve(new SearchResult(job));\n } else {\n resolve(delay(250)\n .then(() => this.jobStatus(job.id))\n .then((jobStatus) => this.trackJobStatus(jobStatus, search)));\n }\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[4].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[4].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) => messages.map(({ index, message }) => (\n
: 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 debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\n\nimport Query from 'views/logic/queries/Query';\nimport Search from 'views/logic/search/Search';\nimport connect from 'stores/connect';\nimport { isPermitted } from 'util/PermissionsMixin';\nimport { CurrentUserStore } from 'stores/users/CurrentUserStore';\nimport { FilterPreviewActions, FilterPreviewStore } from 'stores/event-definitions/FilterPreviewStore';\nimport generateId from 'logic/generateId';\n\nimport FilterPreview from './FilterPreview';\n\nconst isPermittedToSeePreview = (currentUser, config) => {\n const missingPermissions = config?.streams?.some((stream) => !isPermitted(currentUser.permissions, `streams:read:${stream}`));\n\n return !missingPermissions;\n};\n\nclass FilterPreviewContainer extends React.Component {\n fetchSearch = debounce((config) => {\n const { currentUser } = this.props;\n\n if (!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 || 0) / 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 constructor(props) {\n super(props);\n\n this.state = {\n queryId: generateId(),\n searchTypeId: generateId(),\n };\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 {\n query: prevQuery,\n query_parameters: prevQueryParameters,\n streams: prevStreams,\n search_within_ms: prevSearchWithin,\n } = prevProps.eventDefinition.config;\n const {\n query,\n query_parameters: queryParameters,\n streams,\n search_within_ms: searchWithin,\n } = eventDefinition.config;\n\n if (query !== prevQuery || queryParameters !== prevQueryParameters || !isEqual(streams, prevStreams) || searchWithin !== prevSearchWithin) {\n this.fetchSearch(eventDefinition.config);\n }\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\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 expr: undefined,\n left: {\n expr: 'number-ref',\n ref: undefined,\n },\n right: {\n expr: 'number',\n value: 0,\n },\n});\n\nexport const emptyBooleanExpressionConfig = ({ operator = '&&', left = emptyComparisonExpressionConfig(), right = emptyComparisonExpressionConfig() }) => ({\n expr: operator,\n left: left,\n right: right,\n});\n\nexport const emptyGroupExpressionConfig = ({ operator = '&&', child = emptyComparisonExpressionConfig() }) => ({\n expr: 'group',\n operator: operator,\n child: child,\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/union';\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 if (selectedSeries?.type === 'percentage' && selectedSeries?.strategy === 'SUM' && !selectedSeries?.field) {\n return { message: 'Field must be set' };\n }\n\n if ((selectedSeries?.type === 'percentile'\n || selectedSeries?.type === 'max'\n || selectedSeries?.type === 'card')\n && !selectedSeries?.field) {\n return { message: 'Field must be set' };\n }\n\n return (selectedSeries?.type ? {} : 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 cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\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 = 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 * as React from 'react';\nimport { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { defaultCompare as naturalSort } from 'logic/DefaultCompare';\nimport { Select } from 'components/common';\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport { numberRefNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\nimport { percentileOptions, percentageStrategyOptions } from '../../../../views/Constants';\n\nconst formatFunctions = (functions) => functions\n .sort(naturalSort)\n .map((fn) => ({ label: `${fn.toLowerCase()}()`, value: fn }));\n\nconst getSeriesId = (currentSeries) => `${currentSeries.type}-${currentSeries.field ?? ''}`;\n\nconst NumberRefExpression = ({\n aggregationFunctions,\n formattedFields,\n eventDefinition,\n expression,\n onChange,\n renderLabel,\n validation,\n}) => {\n const getSeries = useCallback((seriesId) => eventDefinition?.config?.series?.find((series) => series.id === seriesId), [eventDefinition?.config?.series]);\n\n const createSeries = useCallback(() => ({ id: expression.ref }), [expression.ref]);\n\n const getOrCreateSeries = useCallback((seriesId) => getSeries(seriesId) || createSeries(), [createSeries, getSeries]);\n\n const handleFieldChange = useCallback((key, value) => {\n const series = cloneDeep(eventDefinition?.config?.series);\n const nextSeries = cloneDeep(getOrCreateSeries(expression.ref));\n\n if (value !== undefined) {\n nextSeries[key] = value;\n }\n\n if (key === 'type' && value !== 'percentage') {\n delete nextSeries.strategy;\n }\n\n if (key === 'type' && value !== 'percentage') {\n delete nextSeries.percentile;\n }\n\n const nextSeriesId = getSeriesId(nextSeries);\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 = cloneDeep(expression);\n\n nextExpression.ref = nextSeriesId;\n\n onChange({\n series: series,\n conditions: nextExpression,\n });\n }, [eventDefinition?.config?.series, expression, getOrCreateSeries, onChange]);\n\n const handleAggregationFunctionChange = useCallback((nextFunction) => {\n handleFieldChange('type', nextFunction);\n }, [handleFieldChange]);\n\n const handleAggregationFieldChange = useCallback((nextField) => {\n handleFieldChange('field', nextField);\n }, [handleFieldChange]);\n\n const series = getSeries(expression.ref) || {};\n\n const elements = ['percentage', 'percentile'].includes(series.type) ? 3 : 2;\n\n return (\n
\n \n {renderLabel && If}\n \n
\n \n \n {series.type === 'percentage' && (\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
\n \n {initialText && (\n \n {initialText} \n \n )}\n \n \n \n \n of the following rules:\n \n \n \n);\n\nBooleanOperatorSelector.propTypes = {\n initialText: PropTypes.string,\n operator: PropTypes.string.isRequired,\n onOperatorChange: PropTypes.func.isRequired,\n};\n\nBooleanOperatorSelector.defaultProps = {\n initialText: '',\n};\n\nexport default BooleanOperatorSelector;\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 { Clearfix } from 'components/bootstrap';\nimport { internalNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\n// eslint-disable-next-line import/no-cycle\nimport AggregationConditionExpression from '../AggregationConditionExpression';\n\nconst BooleanExpression = (props) => {\n const { expression, level, onChildChange, validation } = props;\n\n return (\n <>\n \n \n \n >\n );\n};\n\nBooleanExpression.propTypes = {\n expression: internalNodePropType.isRequired,\n parent: internalNodePropType,\n level: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n onChildChange: PropTypes.func.isRequired,\n validation: PropTypes.object,\n};\n\nBooleanExpression.defaultProps = {\n parent: undefined,\n validation: {},\n};\n\nexport default BooleanExpression;\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/cloneDeep';\n\nimport { Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';\nimport { Select } from 'components/common';\nimport { internalNodePropType } from 'logic/alerts/AggregationExpressionTypes';\n\n// eslint-disable-next-line import/no-cycle\nimport AggregationConditionExpression from '../AggregationConditionExpression';\n\nconst ComparisonExpression = (props) => {\n const { expression, level, onChildChange, onChange, renderLabel, validation } = props;\n\n const handleExpressionOperatorChange = (nextOperator) => {\n const nextExpression = cloneDeep(expression);\n\n nextExpression.expr = nextOperator;\n onChange({ conditions: nextExpression });\n };\n\n return (\n
\n \n \n\n
\n \n {renderLabel && Is}\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/cloneDeep';\nimport styled from 'styled-components';\n\nimport { Clearfix } from 'components/bootstrap';\nimport { internalNodePropType } from 'logic/alerts/AggregationExpressionTypes';\nimport { replaceBooleanExpressionOperatorInGroup } from 'logic/alerts/AggregationExpressionConfig';\n\nimport BooleanOperatorSelector from './BooleanOperatorSelector';\n\n// eslint-disable-next-line import/no-cycle\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[4].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[4].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 cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\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 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) => (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 = cloneDeep(expression);\n\n nextExpression[branch] = update;\n nextUpdate = nextExpression;\n }\n\n onChange({ ...changes, conditions: nextUpdate });\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 Expression = ({ expression, series }) => {\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.type\n ? {selectedSeries.type}({selectedSeries.strategy ? `${selectedSeries.strategy}, ` : null}{selectedSeries.field}{selectedSeries.percentile ? `, ${selectedSeries.percentile}` : null})\n : No series selected);\n case '&&':\n case '||':\n return (\n <>\n {' '}\n {expression.expr === '&&' ? 'AND' : 'OR'}{' '}\n \n >\n );\n case 'group':\n return [];\n case '<':\n case '<=':\n case '>':\n case '>=':\n case '==':\n return (\n <>\n {' '}\n {expression.expr}{' '}\n \n >\n );\n default:\n return 'No condition configured';\n }\n};\n\nExpression.propTypes = {\n expression: PropTypes.object,\n series: PropTypes.array.isRequired,\n};\n\nExpression.defaultProps = {\n expression: null,\n};\n\nconst AggregationConditionSummary = ({ conditions, series }) => ;\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/get';\n\nimport { Alert, Row } from 'components/bootstrap';\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
{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 defaultTo from 'lodash/defaultTo';\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 'logic/DefaultCompare';\nimport useFieldTypes from 'views/logic/fieldtypes/useFieldTypes';\nimport { ALL_MESSAGES_TIMERANGE } from 'views/Constants';\nimport { getPathnameWithoutId } from 'util/URLUtils';\nimport useSendTelemetry from 'logic/telemetry/useSendTelemetry';\nimport useLocation from 'routing/useLocation';\nimport { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/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 { pathname } = useLocation();\n const sendTelemetry = useSendTelemetry();\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\n sendTelemetry(TELEMETRY_EVENT_TYPE.EVENTDEFINITION_CONDITION.AGGREGATION_GROUP_BY_FIELD_SELECTED, {\n app_pathname: getPathnameWithoutId(pathname),\n app_section: 'event-definition-condition',\n app_action_value: 'group-by-field-select',\n selection_count: nextValue.length,\n });\n\n propagateConfigChange({ group_by: nextValue });\n }, [pathname, propagateConfigChange, sendTelemetry]);\n\n return (\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 get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { Col, ControlLabel, FormGroup, Input, 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: 5 * 60 * 1000,\n execute_every_ms: 5 * 60 * 1000,\n _is_scheduled: true,\n event_limit: 100,\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 = get(conditions, 'expression', {});\n const defaultConditionType = (isEmpty(group_by) && isEmpty(series) && isEmpty(expression)\n ? conditionTypes.FILTER : conditionTypes.AGGREGATION);\n\n this.state = {\n conditionType: defaultConditionType,\n };\n }\n\n handleConfigChange = (event) => {\n const config = cloneDeep(this.props.eventDefinition.config);\n\n config[event.target.name] = FormsUtils.getValueFromInput(event.target);\n this.propagateConfigChange(config);\n };\n\n propagateConfigChange = (config) => {\n this.props.onChange('config', config);\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.propagateConfigChange(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.propagateConfigChange(nextConfig);\n stateChange.existingAggregationConfig = undefined;\n }\n }\n\n this.setState(stateChange);\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.props.onChange} />\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 {conditionType === conditionTypes.FILTER && (\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\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[4].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[4].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 isEmpty from 'lodash/isEmpty';\nimport upperFirst from 'lodash/upperFirst';\n\nimport { Link } from 'components/common/router';\nimport { Alert } from 'components/bootstrap';\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\nimport LinkToReplaySearch from '../replay-search/LinkToReplaySearch';\n\nconst formatStreamOrId = (streamOrId) => {\n if (typeof streamOrId === 'string') {\n return {streamOrId};\n }\n\n return (\n \n {streamOrId.title}\n \n );\n};\n\nconst getConditionType = (config) => {\n const { group_by: groupBy, series, conditions } = config;\n\n return (isEmpty(groupBy)\n && (!conditions || isEmpty(conditions) || conditions.expression === null)\n && isEmpty(series)\n ? 'filter' : 'aggregation');\n};\n\nconst 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
{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
Actions
\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 */\n\nimport React from 'react';\n\nimport Routes from 'routing/Routes';\nimport { ReplaySearchButtonComponent } from 'views/components/widgets/ReplaySearchButton';\nimport useParams from 'routing/useParams';\n\nconst LinkToReplaySearch = ({ isEvent, id }: { id?: string, isEvent?: boolean }) => {\n const { definitionId } = useParams<{ alertId?: string, definitionId?: string }>();\n const searchLink = isEvent ? Routes.ALERTS.replay_search(id) : Routes.ALERTS.DEFINITIONS.replay_search(id || definitionId);\n\n return (\n Replay search\n );\n};\n\nLinkToReplaySearch.defaultProps = {\n id: undefined,\n isEvent: false,\n};\n\nexport default LinkToReplaySearch;\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 cloneDeep from 'lodash/cloneDeep';\nimport concat from 'lodash/concat';\nimport defaultTo from 'lodash/defaultTo';\nimport pick from 'lodash/pick';\nimport omit from 'lodash/omit';\n\nimport * as URLUtils from 'util/URLUtils';\nimport PaginationURL from 'util/PaginationURL';\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 searchPaginated: { asyncResult: true },\n get: { asyncResult: true },\n create: { asyncResult: true },\n copy: { 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 = 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 searchPaginated(newPage, newPerPage, newQuery, additional) {\n const url = PaginationURL(`${this.sourceUrl}/paginated`, newPage, newPerPage, newQuery, additional);\n const promise = fetch('GET', URLUtils.qualifyUrl(url)).then((response) => {\n const {\n elements,\n query,\n attributes,\n pagination: {\n count,\n total,\n page,\n per_page: perPage,\n },\n } = response;\n\n return {\n elements,\n attributes,\n pagination: {\n count,\n total,\n page,\n perPage,\n query,\n },\n };\n });\n\n EventDefinitionsActions.searchPaginated.promise(promise);\n\n return promise;\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 = cloneDeep(eventDefinition);\n const { _is_scheduled } = pick(clonedEventDefinition.config, ['_is_scheduled']);\n\n clonedEventDefinition.config = omit(clonedEventDefinition.config, ['_is_scheduled']);\n\n return { eventDefinition: clonedEventDefinition, isScheduled: 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 copy(eventDefinition) {\n const promise = fetch('POST', this.eventDefinitionsUrl({ segments: [eventDefinition.id, 'duplicate'] }));\n\n promise.then(\n (response) => {\n UserNotification.success('Event Definition duplicated successfully',\n `Event Definition \"${response.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(`Duplicating Event Definition \"${eventDefinition.title}\" failed with status: ${error}`,\n 'Could not duplicate Event Definition');\n }\n },\n );\n\n EventDefinitionsActions.copy.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 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"],"names":["___CSS_LOADER_EXPORT___","module","options","update","IconHeader","ConditionalCollapse","condition","wrapper","children","bsStyle","className","collapsible","header","title","defaultExpanded","defaultHeader","wrapChild","FilterPreviewActions","singleton","delay","ms","resolve","FilterPreviewStore","segments","query","uri","nextSegments","URLUtils","searchRequest","newSearch","promise","response","Search","job","search","SearchResult","jobStatus","executionState","jobId","result","UserNotification","messages","index","message","searchResult","isFetchingData","errors","displayPreview","renderedResults","HelpPanel","isPermittedToSeePreview","currentUser","config","stream","FilterPreviewContainer","props","queryId","searchTypeId","formattedStreams","Query","param","generateId","eventDefinition","prevProps","prevQuery","prevQueryParameters","prevStreams","prevSearchWithin","queryParameters","streams","searchWithin","filterPreview","isLoading","connect","CurrentUserStore","otherProps","emptyComparisonExpressionConfig","emptyBooleanExpressionConfig","operator","left","right","emptyGroupExpressionConfig","child","replaceBooleanExpressionOperatorInGroup","nextOperator","expression","nextExpression","flattenValidationTree","validationTree","validateExpressionTree","series","error","selectedSeries","s","validationResults","internalNodePropType","numberExpressionNodePropType","numberRefNodePropType","NumberExpression","onChange","renderLabel","validation","handleChange","event","FormsUtils","formatFunctions","functions","fn","getSeriesId","currentSeries","NumberRefExpression","aggregationFunctions","formattedFields","getSeries","seriesId","_a","_b","createSeries","getOrCreateSeries","handleFieldChange","key","value","nextSeries","nextSeriesId","seriesIndex","handleAggregationFunctionChange","nextFunction","handleAggregationFieldChange","nextField","elements","newValue","OperatorSelector","theme","BooleanOperatorSelect","isFirstElement","BooleanOperatorSelector","initialText","onOperatorChange","BooleanExpression","level","onChildChange","ComparisonExpression","handleExpressionOperatorChange","Group","GroupExpression","handleOperatorChange","globalGroupOperator","defaultOperator","parent","prevOperator","groupExpression","branch","changes","nextUpdate","expressionComponent","Expression","AggregationConditionSummary","conditions","StyledPanel","StyledButton","AggregationConditionsFormSummary","expressionValidation","showInlineValidation","toggleShowValidation","initialEmptyConditionConfig","extractSeriesReferences","acc","StyledAlert","AggregationConditionsForm","nextConditions","seriesReferences","commonStyles","AggregationForm","allFieldTypes","useFieldTypes","ftA","ftB","fieldType","pathname","useLocation","sendTelemetry","useSendTelemetry","propagateConfigChange","nextConfig","handleGroupByChange","selected","nextValue","conditionTypes","initialFilterConfig","initialAggregationConfig","FilterAggregationForm","stateChange","nextConditionType","existingAggregationConfig","group_by","defaultConditionType","conditionType","entityTypes","FilterForm","withStreams","WrappedComponent","hiddenStreams","wrappedComponentName","WithStreams","StreamsStore","filteredStreams","FilterAggregationFormContainer","formatStreamOrId","streamOrId","Routes","getConditionType","groupBy","renderQueryParameters","p","undeclaredParameters","streamIds","streamIdsWithMissingPermission","warning","renderedStreams","id","s1","s2","searchWithinMs","executeEveryMs","isScheduled","event_limit","executeEvery","effectiveStreamIds","LinkToReplaySearch","isEvent","definitionId","searchLink","EventDefinitionsActions","EventDefinitionsStore","page","pageSize","newPage","newPerPage","newQuery","additional","url","attributes","count","total","perPage","eventDefinitionId","isAlert","clonedEventDefinition","_is_scheduled","newEventDefinition","updatedEventDefinition"],"sourceRoot":""}